18

考虑这个简单的例子(显示为红色):

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

它以红色正确显示在终端上。现在考虑:

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

它不显示颜色。

注意:我知道通过清除和重新运行来编写一个模仿基本行为的循环很容易。但是清除操作会导致屏幕闪烁,在watch下是不会发生的

编辑:最初这个问题指定了转义序列而不是 vt100 序列,但这并不是我真正想要的,并且用单引号解决了。

4

3 回答 3

12

从Ubuntu 11.10 上man watchwatch0.3.0开始:

默认情况下 watch 通常不会传递转义字符,但是如果您使用 --c 或 --color 选项,那么 watch 将解释前景的 ANSI 颜色序列。

它似乎不适用于我的终端上的文字字符串,但这些工作:

watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
于 2012-04-11T11:21:04.500 回答
5

编辑:

watch支持颜色的更新版本。在问题示例的特定情况下,您将需要使用额外的引用级别来保留引号和转义:

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

来自man watch

  -c, --color
          Interpret ANSI color sequences.

之前:

来自man watch

从程序输出中去除非打印字符。如果您想查看它们,请使用“cat -v”作为命令管道的一部分。

但他们没有得到解释,所以我认为没有任何办法。

于 2010-03-10T17:58:41.693 回答
1

您可以尝试单引号您的命令:

watch 'echo -e "\tHello World"'

在我的机器上,这给我留下了-e第一个字符,并且正确的选项卡hello world. 似乎-e是我的 echo 版本的默认值。尽管如此,它仍然是朝着正确标签的进步hello world

发生的事情是双重取消引用:
手表所见

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

watch 调用的 shell 见:

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

然后反斜杠开始发挥作用,即使被引用,它也变成了引用的噩梦。

于 2010-03-10T17:01:11.277 回答