Burada iki problem mevcut:
ls
Renk desteğini otomatik algılayan - gibi komutlar borulardan destek bulamıyor
less
varsayılan olarak sadece renk kodlarını gösterecek şekilde ayarlanmıştır.
Her ikisi de üstesinden gelinebilir ama biraz dağınık:
ls --color=always | less -R
Bu ls
belirli değil . Rengi destekleyen birçok komutun da geçersiz kılma argümanı vardır.
Biraz daha derinlemesine bir cevap ls
STDOUT'un gerçek bir terminale ait olup olmadığını kontrol etmektir. Etrafınızdakileri pipoladığınızda, STDOUT bir sonraki komutun STDIN değerine ayarlanır.
İş yerinde görebilirsiniz içinde ls
kaynak kodu . isatty
Durumun ne olduğunu bulmak için bu komutu (çekirdek POSIX arayüzü) kullanıyor:
Renkler varsayılan olarak açıktır:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
Birden çok sütuna çıktı vermeye çalışıyor muyuz:
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
çok benzer bir şey yapar, açıkça geçersiz kılmadıkça, renk desteğini algılar isatty
:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -R
amamost
bugünlerde kullanma eğilimindeyimless
. Ayrıca: gnu.org/software/src-highlite renk vurgulayıcıdır (daha az işe