Как я передаю окрашенный вывод разности по каналу к меньше?

Если у Вас есть Параллель GNU, http://www.gnu.org/software/parallel/ установил Вас, может сделать это:

parallel ./pngout -s0 {} R{} ::: *.png

Можно установить Параллель GNU просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вводные видео для Параллели GNU для узнавания больше: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1

37
17.05.2013, 19:26
2 ответа

diff не могут цвета вывода, Вам нужна другая программа, такой как colordiff для этого. Раскрашивает терминал, печатаются с помощью управляющих кодов ANSI, которые меньше не интерпретирует по умолчанию. Добираться less для корректного показа цветов Вам нужно -r, или еще лучше, -R переключатель:

colordiff -- "$file1" "$file2" | less -R

От man less:

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI  "color"  escape  sequences  are
          output in "raw" form.  Unlike -r, the screen appearance
          is maintained correctly in most  cases.   ANSI  "color"
          escape sequences are sequences of the form:

               ESC [ ... m

          where  the  "..."  is  zero or more color specification
          characters For the purpose of keeping track  of  screen
          appearance,  ANSI color escape sequences are assumed to
          not move the cursor.  You  can  make  less  think  that
          characters  other  than  "m"  can end ANSI color escape
          sequences by setting the environment  variable  LESSAN‐
          SIENDCHARS  to  the  list of characters which can end a
          color escape sequence.  And you  can  make  less  think
          that characters other than the standard ones may appear
          between the ESC and the m by  setting  the  environment
          variable  LESSANSIMIDCHARS  to  the  list of characters
          which can appear.

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


Если Вы не можете установить внешние программы, необходимо смочь получить тот же вывод с помощью более ручного подхода:

diff a b | 
   perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"} 
              elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
33
27.01.2020, 19:36

Передавать по каналу окрашенный разностью к меньше:

diff $file1 $file2 | colordiff | less -r

Сделать это более читаемым, путем ограничения его одним экраном:

diff -uw $file1 $file2 | colordiff | less -r

И, чтобы заставить меньше не отображаться, если существует только одна экранная ценность содержания:

diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F

-F заставляет меньше сразу закрыться, если существует меньше чем одна экранная ценность содержания, канал к stderr - то, потому что меньше завершений при потере вывода - путем передачи по каналу к stderr он производится, даже если меньше не отображается.

Альтернатива (и, я думаю, лучше), путь, должен просто использовать-X для предотвращения меньшего количества очистки экран:

diff -uw $file1 $file2 | colordiff | less -r -X -F

Это работает хорошо на меня, но могло бы быть характерно для удара. colordiff не является встроенным, но легко установлен.

8
27.01.2020, 19:36
  • 1
    Единственная команда, в которой он нуждается, less -r –  sendmoreinfo 17.05.2013, 19:46

Теги

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