Предотвращение наручных цветов

Я изменяю скрипты на работе, которые отслеживают файлы журналов, чтобы выделить определенные элементы и раскрасить их. Конечным результатом является список из 6-значных чисел в нескольких столбцах. Я смог добавить ~ к началу номера, и он ничего не сломал в финальном выпуске, но это довольно уродливо и трудно читать. Тем не менее, когда я пытаюсь раскрасить число, либо в предыдущих сценариях bash, либо при окончательной обработке данных в perl-скрипте, цветной текст сбрасывается.

Например, исходное число, которое я буду помещать в $num :

 123456 

Я ввожу это в perl (или, что то же самое в bash):

 "\e[1;34m" . $num . "\e[0m" 

И вот что я получаю:

 [1;34m123456[0m 

Я также пробовал это, сбежавшую версию, но получаю то же самое:

 "\x1B[1;34m" . $num . "\x1B[0m" 

Если это имеет значение, вот реальный стек скриптов (это беспорядок):

  • Perl вызывается внутри сценария оболочки, который затем соединяется с grep / cut / etc.
  • сценарий оболочки с большим количеством cut / etc., затем трубы в .pl
  • сценарий оболочки показывает, что вывод

Может быть, watch не любят цвет?

Я не очень хорошо знаю perl , поэтому, думаю, не помешает показать, что я вижу вокруг печатных линий:

 my $format = ("%-8s") x scalar(@{$a[0]}); printf("$format\n", @$_) 

  • Это ошибка, которую zsh печатает полную строку с printf '% .s'?
  • Печать столбцов данных, которые
  • Десятичное шестнадцатеричное преобразование, работающее в Linux, но не в Unix
  • Как printf с несколькими аргументами, разделенными пространством
  • Форматирование в формате Printf с переменным форматом - что делает эта ссылка?
  • Как напечатать $ {STR1} и $ STR2 - а не их содержимое - в файл?
  • bash + с помощью printf для печати в специальном формате
  • Как печатать слева и справа от уже напечатанного вывода
  • 3 Solutions collect form web for “Предотвращение наручных цветов”

    Я столкнулся с проблемами «крашения цвета» с помощью часов , потому что часы используют простой стиль / bin / sh output, который захватывает любой цвет, псевдонимы, ярлыки … весь shebang!

    Поэтому я собрал это вместе, разместил в моем .bashrc , позволяет мне использовать все свои собственные псевдонимы, ярлыки и многое другое:

     Usage: watcher 20 'somecommand | apipe | grep' 

    Число – это задержка между обновлениями, в секундах, команда может включать в себя все, что вы можете процитировать.

     ###### 'watch' workalike, lets me use my aliases and such function watcher() { WATCHERTIME=$1 ; WATCHERFILE=/tmp/watcher$$ ; shift ; while true ; do WATCHERHEIGHT=$(($LINES - 5)) ; ( eval $* ) | tail -n ${WATCHERHEIGHT} > ${WATCHERFILE} 2>/dev/null; clear ; /bin/echo -n "Every ${WATCHERTIME} seconds - " ; date ; /bin/echo ; cat ${WATCHERFILE} ; \rm -f ${WATCHERFILE} ; /bin/echo ; /bin/echo "==" ; sleep ${WATCHERTIME} ; done ; } 

    Чтобы сломать это:

     function watcher() { WATCHERTIME=$1 WATCHERFILE=/tmp/watcher$$ shift while true; do WATCHERHEIGHT=$(($LINES - 5)) ( eval $* ) | tail -n ${WATCHERHEIGHT} > ${WATCHERFILE} 2>/dev/null clear /bin/echo -n "Every ${WATCHERTIME} seconds - " date /bin/echo cat ${WATCHERFILE} \rm -f ${WATCHERFILE} /bin/echo /bin/echo "==" sleep ${WATCHERTIME} done } 

    Он определяет текущую высоту экрана в строках, вычитает достаточно для собственного вывода, затем повторно выполняет указанную команду, затем очищает экран, отображает вывод и ждет следующего цикла. Он показывает короткое «==» внизу, чтобы обозначить, где заканчивается вывод. Когда-нибудь это полезно знать.

    Я сделал это так, чтобы при отображении была минимальная возможная задержка. если вы не захватили вывод и затем отобразите его, вы получите длинную паузу, а затем выход … icky.

    Так как это не clobber цвета, вы получаете все, что вы привыкли получать. Наслаждайтесь!

    Проблема в том, что watch используют Curses, а функции вывода строки curses работают на виртуальном фреймбуфере с отдельными плоскостями для символов и их атрибутов / цветов. Строки отправляются в фреймбуфер как есть, без терминальной интерпретации. Чтобы защитить от заклинивания состояния терминала, Curses игнорирует ESC (между прочим), поэтому watch не будут делать цвет по умолчанию.

    Вы можете исправить это, следуя советам мудрецов jw013 или lornix : либо используйте watch --color либо завершите свой скрипт чем-то вроде while true; do clear; $SCRIPT; sleep 2; done while true; do clear; $SCRIPT; sleep 2; done while true; do clear; $SCRIPT; sleep 2; done цикл.

    Вероятно, вам нужна опция --color для watch .

    Interesting Posts

    Разрешение отклонено (даже как root) на смонтированном ISO-изображении с помощью Furius ISO Mount

    Как объединить все (текстовые) файлы в каталог в один?

    Как я могу заставить `ожидать` игнорировать $ (знак доллара) в пароле?

    Ошибка журнала для dnsmasq на osx с помощью newsyslog

    День недели плюс x дней

    Как разрешить xserver рисовать окна с указанного хоста?

    Как повернуть набор изображений из командной строки?

    Как найти данные установки последнего исправления безопасности?

    Как сбежать в YAML правильно?

    Как изменить порядок или изменить результат ниже

    Как заставить Wicd использовать другие драйверы в Debian 7.2 Xfce?

    Настроить dnssec с помощью dnsmasq, как я могу доверять общедоступному DNS Google?

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

    Создание загрузочного образа ISO из системы CentOS (Linux)

    Окна диалога Zenity имеют чрезмерную высоту и не могут быть изменены. Ошибка обхода?

    Linux и Unix - лучшая ОС в мире.