考虑这个简单的例子(以红色显示):
echo -e "\033[31mHello World\033[0m"
它在终端上以红色正确显示。现在考虑:
watch echo -e "\033[31mHello World\033[0m"
它不显示颜色。
注意:我知道通过清除和重新运行来编写一个模仿基本行为的循环很容易。但是,清除操作会导致屏幕闪烁,这在手表
下不会发生编辑:最初这个问题指定了转义序列而不是vt100序列,但这不是我所追求的,并且用单引号解决了。
答案 0 :(得分:12)
来自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
答案 1 :(得分:4)
修改强>
watch
的更新版本支持颜色。在问题中的示例的特定情况下,您将需要使用额外的引用级别来保留引号和转义:
watch 'echo -e "\033[31mHello World\033[0m"'
来自man watch
:
-c, --color Interpret ANSI color sequences.
<强>此前:强>
来自man watch
:
从程序输出中删除非打印字符。使用“cat -v” 作为命令管道的一部分,如果你想看到它们。
但他们没有被解释,所以我认为没有办法。
答案 2 :(得分: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
然后反斜杠发挥作用,即使被引用,也会成为引用噩梦。