Как я делаю 'меньше' цветами вывода?

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

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

grep -r something

но это не делает:

grep -r something | less

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

25
задан 13 June 2014 в 10:09

2 ответа

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

  • Команды как 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 ();
36
ответ дан 23 November 2019 в 01:13

Если Вы интересуетесь, раскрашивает less в более общем плане Вы могли бы хотеть посмотреть на lesspipe.sh. См., например, http://freecode.com/projects/lesspipe.

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

Это будет также colorize сценарии оболочки, сценарии жемчуга, и т.д. так же к текстовому редактору, но без использования любой программы "предварительной обработки", чтобы сделать колоризацию.

2
ответ дан 23 November 2019 в 01:13

Другие вопросы по тегам:

Похожие вопросы: