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 ls
spesifik. Banyak perintah yang mendukung warna juga memiliki argumen override.
Jawaban yang sedikit lebih dalam ls
adalah 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 ls
kode sumber . Menggunakan isatty
perintah (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;
}
grep
melakukan 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 -R
tapi saya cenderung menggunakannyamost
saat iniless
. JUGA: gnu.org/software/src-highlite adalah stabilo warna (kurang karya juga)