Ada dua masalah disini:
- Perintah seperti
ls— yang secara otomatis mendeteksi dukungan warna — tidak menemukan dukungan dari pipa
less diatur untuk hanya menampilkan kode warna secara default.
Keduanya bisa diatasi tetapi agak kikuk:
ls --color=always | less -R
Ini tidak lsspesifik. Banyak perintah yang mendukung warna juga memiliki argumen override.
Jawaban yang sedikit lebih dalam lsadalah memeriksa apakah STDOUT milik terminal nyata atau tidak. Ketika Anda menyambungkan berbagai hal, STDOUT diatur ke STDIN dari perintah selanjutnya.
Anda dapat melihat ini sedang bekerja dalam lskode sumber . Menggunakan isattyperintah (antarmuka POSIX inti) untuk mengetahui situasinya:
Apakah warna diaktifkan secara default:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
Apakah kami mencoba menampilkan dalam beberapa kolom:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grepmelakukan hal yang sangat mirip, kecuali diganti secara eksplisit, itu akan mendeteksi dukungan warna, dengan isatty:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -Rtapi saya cenderung menggunakannyamostsaat iniless. JUGA: gnu.org/software/src-highlite adalah stabilo warna (kurang karya juga)