linux 如何使watch命令解释vt100序列?

biswetbf  于 2023-01-29  发布在  Linux
关注(0)|答案(3)|浏览(160)

考虑以下简单示例(显示为红色):
echo -e "\033[31mHello World\033[0m"
它在终端上正确地显示为红色。现在考虑:
watch echo -e "\033[31mHello World\033[0m"
它不显示颜色。
注意:我知道通过清除和重新运行来编写一个模拟基本行为的循环是很容易的。但是,清除操作会导致屏幕 Flink ,这在监视下不会发生
编辑:最初这个问题指定转义序列而不是vt100序列,但这并不是我真正想要的,用单引号解决了这个问题。

fjaof16o

fjaof16o1#

从Ubuntu 11.10上的**watch 0.3.0**的man watch版本开始:
默认情况下,watch通常不会传递转义字符,但是如果使用--c或--color选项,watch将为前景解释ANSI颜色序列。
在我的终端上,它似乎不适用于你的字符串,但这些字符串适用:

watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
but5z9lq

but5z9lq2#

    • 编辑:**

最新版本的watch支持颜色。在问题示例的特定情况下,您需要使用额外的引号来保留引号和转义符:

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

man watch开始:

-c, --color
          Interpret ANSI color sequences.
    • 以前:**

man watch开始:
非打印字符将从程序输出中删除。如果您想查看它们,请使用"cat-v"作为命令管道的一部分。
但他们没有得到解释,所以我不认为有任何办法。

nnt7mjpx

nnt7mjpx3#

您可以尝试使用单引号引用命令:

watch 'echo -e "\tHello World"'

在我的机器上,这样我就有了-e作为第一个字符,并且有了正确的标签hello world.。看起来-e是我的echo版本的默认值。
这是一个双重的反引号:
看什么

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

看贝壳叫什么:

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

然后反斜杠开始起作用,即使是在引用的时候,它也变成了引用的噩梦。

相关问题