Как я могу заставить команду watch интерпретировать последовательности vt100? - PullRequest
16 голосов
/ 10 марта 2010

Рассмотрим этот простой пример (который отображается красным цветом):

echo -e "\033[31mHello World\033[0m"

Отображается на терминале правильно красным цветом. Теперь рассмотрим:

watch echo -e "\033[31mHello World\033[0m"

Цвет не отображается.

Примечание: я знаю, что легко написать цикл, который имитирует основное поведение путем очистки и повторного запуска. Однако операция очистки приводит к тому, что экран мигает, чего не происходит под наблюдением

РЕДАКТИРОВАТЬ: Первоначально этот вопрос указывал escape-последовательности, а не последовательности vt100, но на самом деле это не то, что мне нужно, и был решен с помощью одинарных кавычек.

Ответы [ 3 ]

12 голосов
/ 11 апреля 2012

Из man watch из watch 0.3.0 в Ubuntu 11.10:

По умолчанию часы обычно не пропускают управляющие символы, однако если вы используете опцию --c или --color, тогда часы будут интерпретировать цветовые последовательности ANSI для переднего плана.

Кажется, он не работает с вашей литеральной строкой на моем терминале, но они работают:

watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
4 голосов
/ 10 марта 2010

Изменить:

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

watch 'echo -e "\033[31mHello World\033[0m"'

С man watch:

  -c, --color
          Interpret ANSI color sequences.

Ранее:

С man watch:

Непечатаемые символы удаляются из вывода программы. Используйте "cat -v" как часть командного конвейера, если вы хотите их увидеть.

Но их не интерпретируют, поэтому я не думаю, что есть какой-либо способ.

1 голос
/ 10 марта 2010

Вы можете попробовать заключить в кавычки вашу команду:

watch 'echo -e "\tHello World"'

На моей машине это оставляет меня с -e в качестве первого символа и с правильной вкладкой hello world. Кажется, -e по умолчанию для моей версии echo. Тем не менее, это прогресс в направлении правильной вкладки hello world

Что происходит, это двойная кавычка:
что смотреть

echo -e "\033[31mHello World\033[0m"

то, что снаряд вызвал из часов, см .:

echo -e \033[31mHello World\033[0m

А затем в игру вступает обратный слеш, даже когда он цитируется, и это становится кошмаром для цитат.

...