Тут є дві проблеми:
- Такі команди,
lsякі автоматично визначають кольорову підтримку, не знаходять підтримку з труб
less за замовчуванням встановлено лише відображення кольорових кодів.
Обидва можна подолати, але це трохи незграбно:
ls --color=always | less -R
Це не lsконкретно. У багатьох командах, що підтримують колір, також є аргумент переосмислення.
Трохи більш поглиблена відповідь полягає в тому, щоб lsперевірити, належить чи ні його STDOUT до справжнього терміналу чи ні. Коли ви передаєте речі навколо, STDOUT встановлюється на STDIN наступної команди.
Це ви можете побачити на роботі у lsвихідному коді . Використовуючи isattyкоманду (основний інтерфейс POSIX), розробити ситуацію:
Чи ввімкнено кольори за замовчуванням:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
Чи намагаємось виводити в декілька стовпців:
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робить дуже подібну річ, якщо явно не відмінено, вона виявить підтримку кольорів, використовуючи isatty:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -Rале я, як правило, використовуюmostсьогодні замість цьогоless. ТАКОЖ: gnu.org/software/src-highlite - це кольоровий підсвічування (теж працює менше)