Burada iki sorun var:
- Renk desteğini otomatik olarak algılayan
ls
gibi komutlar - borulardan destek bulamıyor
-
less
, varsayılan olarak renk kodlarını gösterecek şekilde ayarlandı.
Her ikisi de üstesinden gelinebilir ama biraz rahatsız edici:
ls --color=always | less -R
Bu, ls
özel değil. Rengi destekleyen birçok komutun da bir geçersiz kılma argümanı vardır.
Biraz daha derinlemesine bir cevap ls
'sinin STDOUT'unun gerçek bir terminale ait olup olmadığını kontrol etmesidir. İşleri etrafa pipettiğinizde STDOUT, bir sonraki komutun STDIN'ine ayarlanır.
Bunu işte ls
kaynak kodunda görebilirsiniz . Durumun ne olduğunu öğrenmek için isatty
komutunu (çekirdek POSIX arabirimi) kullanıyor:
-
Renkler varsayılan olarak açık:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
-
Birden çok sütunda çıktı almaya ç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
, açıkça geçersiz kılmadığı sürece, benzer bir şeyi yapar; isatty
ile renk desteğini algılar:
color_option = isatty (STDOUT_FILENO) && should_colorize ();