考虑这个简单的示例(以红色显示):
echo -e "\033[31mHello World\033[0m"
它在终端上正确显示为红色。现在考虑:
watch echo -e "\033[31mHello World\033[0m"
不显示颜色。
注意:我知道编写一个通过清除和重新运行来模仿基本行为的循环很容易。但清除操作会导致屏幕闪烁,在观看时不会出现这种情况
编辑:最初这个问题指定了转义序列而不是vt100序列,但这并不是我真正想要的,并用单引号解决了。
来自 Ubuntu 11.10 上
man watch
0.3.0的
watch
:
默认情况下,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
然后反斜杠开始发挥作用,即使在引用时也是如此,这变成了一场引用噩梦。