考虑以下简单示例(显示为红色):
echo -e"\033[31mHello World\033[0m"
它在终端上正确显示为红色。 现在考虑:
watch echo -e"\033[31mHello World\033[0m"
它不显示颜色。
注意:我知道编写一个通过清除和重新运行来模仿基本行为的循环很容易。 但是,清除操作会导致屏幕闪烁,这在手表情况下不会发生
编辑:最初这个问题指定转义序列而不是vt100序列,但这不是我真正想要的,并用单引号解决。
通过仅使用shell内置程序来清除和显示内容,从技术上讲它不会闪烁。 将内容保存到shell变量中,然后在屏幕上clear,在echo var中保存:while sleep ; do x="$( 2>&1 )" ; clear ; echo"$x" ; done
在Ubuntu 11.10上的watch 0.3.0的man watch中:
By default watch will normally not pass escape characters, however if you use the --c or --color option, then watch will interpret ANSI color sequences for the foreground.
在我的终端上,它似乎不适用于您的文字字符串,但这些方法可以:
watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
它在mac osx上的手表man watch的手册页中,但是afaik它不起作用。
编辑:
watch的最新版本支持颜色。在问题示例的特定情况下,您将需要使用额外的引号级别来保留引号和转义符:
watch 'echo -e"\033[31mHello World\033[0m"'
从man watch:
-c, --color
Interpret ANSI color sequences.
先前:
从man watch:
Non-printing characters are stripped from program output. Use"cat -v"
as part of the command pipeline if you want to see them.
但是他们没有得到解释,所以我认为没有任何办法。
我基本上相信它是不可能的。
我相信手表的最新版本可能增加了对颜色的支持,但是我没有找到相关文档。
为什么在使用git时无法正常工作?
@AmanuelNega:它对我有用。我尝试了watch git status和watch git log。您没有说您尝试了哪个子命令,或者它到底对您没有用,所以我无法猜测您的问题是什么。如果您的意思是您没有变色,则当git的输出未输出到tty时,您需要告诉git输出颜色:watch --color git log --color。这是典型的行为(例如,尝试ls | cat与ls --color | cat。
谢谢,我知道了。我将配置更改为始终使用颜色
您可以尝试单引号命令:
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
然后,即使引用了反斜杠,反斜杠也开始起作用,这成为了引用梦night。
为了简化事情,我可能使事情太简单了。没错,这行得通,我对此表示反对,但是我真正要的是使vt100代码正常工作,这似乎是与仅解释转义序列不同的问题。例如:echo -e" 033 [31mHello World 033 [0m"]即使在单引号下也无法正常运行。