如何让watch命令解释vt100序列?

问题描述 投票:0回答:3

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

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

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

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

不显示颜色。

注意:我知道编写一个通过清除和重新运行来模仿基本行为的循环很容易。但清除操作会导致屏幕闪烁,在观看时不会出现这种情况

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

linux unix shell terminal watch
3个回答
13
投票

来自 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

8
投票

编辑:

最新版本的

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

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

来自

man watch

  -c, --color
          Interpret ANSI color sequences.

上一篇:

来自

man watch

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

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


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

然后反斜杠开始发挥作用,即使在引用时也是如此,这变成了一场引用噩梦。

© www.soinside.com 2019 - 2024. All rights reserved.