Как мне сделать «меньше» цветов вывода?

17

Когда я запускаю программу (например, grep или ls ) без пейджера, ее вывод окрашен. Однако, когда я запустил его вывод в less , никаких цветов не отображается.

Например, эта команда выводит цветной вывод:

grep -r something

, но это не так:

grep -r something | less

Почему? Как я могу видеть цвета через less ?

    
задан M R R 13.06.2014 в 15:57
источник

2 ответа

28

Здесь есть две проблемы:

  • Команды, такие как 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 ();
    
ответ дан Oli 13.06.2014 в 16:49
источник
2

Если вас интересуют цвета в less в более общем плане, вы можете посмотреть lesspipe.sh . См., Например, Ссылка .

  

lesspipe.sh - это входной фильтр для пейджера, который меньше, чем описано в man-странице less. Скрипт работает под совместимой с ksh оболочкой (например, bash, zsh) и позволяет вам меньше использовать файлы с двоичным содержимым, сжатыми файлами, архивами и файлами, содержащимися в архивах.

Он также раскрасит сценарии оболочки, perl-скрипты и т. д. аналогично текстовому редактору, но без использования какой-либо программы «предварительной обработки» для выполнения раскраски.

    
ответ дан DaveEmme 13.06.2014 в 21:11