考虑这个简单的例子(显示为红色):
echo -e "\033[31mHello World\033[0m"
它以红色正确显示在终端上。现在考虑:
watch echo -e "\033[31mHello World\033[0m"
它不显示颜色。
注意:我知道通过清除和重新运行来编写一个模仿基本行为的循环很容易。但是清除操作会导致屏幕闪烁,在watch下是不会发生的
编辑:最初这个问题指定了转义序列而不是 vt100 序列,但这并不是我真正想要的,并且用单引号解决了。
从Ubuntu 11.10 上man watch
的watch
0.3.0开始:
默认情况下 watch 通常不会传递转义字符,但是如果您使用 --c 或 --color 选项,那么 watch 将解释前景的 ANSI 颜色序列。
它似乎不适用于我的终端上的文字字符串,但这些工作:
watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
编辑:
watch
支持颜色的更新版本。在问题示例的特定情况下,您将需要使用额外的引用级别来保留引号和转义:
watch 'echo -e "\033[31mHello World\033[0m"'
来自man watch
:
-c, --color Interpret ANSI color sequences.
之前:
来自man watch
:
从程序输出中去除非打印字符。如果您想查看它们,请使用“cat -v”作为命令管道的一部分。
但他们没有得到解释,所以我认为没有任何办法。
您可以尝试单引号您的命令:
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
然后反斜杠开始发挥作用,即使被引用,它也变成了引用的噩梦。