Когда я запускаю программу (например, grep
или ls
) без пейджера окрашен его вывод. Однако, когда я выполняю его передающий его вывод по каналу к less
, никакие цвета не показывают.
Например, эта команда выводы, окрашенные выводом:
grep -r something
но это не делает:
grep -r something | less
Почему? Как я могу пережить цвета less
?
Здесь существует две проблемы:
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 ();
Если Вы интересуетесь, раскрашивает less
в более общем плане Вы могли бы хотеть посмотреть на lesspipe.sh
. См., например, http://freecode.com/projects/lesspipe.
lesspipe.sh является входным фильтром для пейджера меньше, как описано в меньшем, страница справочника. Сценарий работает под ksh-совместимой оболочкой (например, удар, zsh) и позволяет Вам использовать меньше для просмотра файлов с двоичным содержанием, сжатыми файлами, архивами и файлами, содержавшимися в архивах.
Это будет также colorize сценарии оболочки, сценарии жемчуга, и т.д. так же к текстовому редактору, но без использования любой программы "предварительной обработки", чтобы сделать колоризацию.