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

Я изменяю скрипты на работе, которые отслеживают файлы журналов, чтобы выделить определенные элементы и раскрасить их. Конечным результатом является список из 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", @$_) 

  • Обработчик SIGINT работает только один раз
  • bash предотвращает прерывание printf другой printf
  • Команда SED - char 4: unterminated `s '
  • Установка позиции столбца в printf
  • Сценарий Bash, как принять одно- или двузначное число и сделать его 2-значным
  • вывод печати на 3 отдельных столбца
  • Невозможно сохранить значение ascii в переменной
  • Точная метка времени в 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

    Приложения не начинаются с просветления WM

    добавление зашифрованных / домашних в LVM / LUKS

    Kexec сразу после установки Kickstart (где cmdline?)

    mount systemd монтируется только при загрузке, после этого не удается перезагрузить

    Уведомление о статусе отправки (задержка) с моего сервера?

    не может скопировать более 29 файлов на целевой сервер, используя сценарий оболочки

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

    Почему порядок результатов подстановки может отличаться при использовании с терминалом или с perl?

    Не удалось запустить команду yum на Redhat 7

    Chrome – Gdk: gdk_window_set_user_time вызван на не-уровень

    Как узнать путь по умолчанию для каталога журналов?

    gnome-terminal: небольшой зазор в правой части экрана (Ubuntu)

    Загрузить файл, связанный в MySQL DB, извлечь текст и вставить в db с помощью скрипта bash?

    Как уменьшить объем фонового музыкального потока при воспроизведении другого источника звука?

    update-rc.d не принимает заголовок файла сценария

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