Burada iki problem mevcut:
lsRenk 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 lsbelirli değil . Rengi destekleyen birçok komutun da geçersiz kılma argümanı vardır.
Biraz daha derinlemesine bir cevap lsSTDOUT'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 lskaynak kodu . isattyDurumun 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 -Ramamostbugünlerde kullanma eğilimindeyimless. Ayrıca: gnu.org/software/src-highlite renk vurgulayıcıdır (daha az işe