Тут є дві проблеми:
- Такі команди,
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 - це кольоровий підсвічування (теж працює менше)