【问题标题】:How can I make the watch command interpret vt100 sequences?如何让 watch 命令解释 vt100 序列?
【发布时间】:2011-01-25 22:41:50
【问题描述】:

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

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

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

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

它不显示颜色。

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

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

【问题讨论】:

  • 仅使用 shell 内置程序来清除和显示内容,技术上不会闪烁。将内容保存到 shell 变量中,然后 clear 屏幕和 echo 变量:while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done

标签: linux unix shell terminal watch


【解决方案1】:

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

【讨论】:

  • 它在 mac osx 上 watch man watch 的联机帮助页中,但是 afaik 它不起作用。
  • 这让我很头疼! 有散落在各处的着色代码。 tail -n 5 <file> 向我展示了一个美丽、多彩的展示。 watch tail -n 5 <file> 显示黑白输出,我可以看到所有代码。 watch -c tail -n 5 <file> 向我展示了黑白但没有代码(这样更容易阅读,但我想要颜色)。
  • 原来我之前的评论没有实际意义,tail 有一个 -f 参数,它包含一个 watch 功能,可以保留并以彩色方式显示文件中包含的任何颜色代码。跨度>
【解决方案2】:

编辑:

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

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

来自man watch:

  -c, --color
          Interpret ANSI color sequences.

以前:

来自man watch:

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

但它们不会被解释,所以我认为没有任何办法。

【讨论】:

  • 我基本上相信这是不可能的。
  • 我相信最近版本的手表可能增加了颜色支持,但我没有找到文档。
  • @AmanuelNega:它对我有用。我试过watch git status 和watch git log。您没有说您尝试了哪个子命令,或者它到底对您不起作用,所以我无法猜测您的问题是什么。如果你的意思是你没有得到颜色,那么你需要告诉git 在它的输出不是到 tty 时输出颜色:watch --color git log --color。这是一种典型的行为(例如,尝试 ls | cat 与 ls --color | cat。
  • 谢谢我想通了。我将配置更改为始终使用颜色
【解决方案3】:

你可以尝试单引号你的命令:

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

然后反斜杠开始发挥作用,即使在引用时,它也会成为引用的噩梦。

【讨论】:

  • 为了简化事情,我可能把事情做得太简单了。你说得对,这很有效,我对此表示赞同,但我真正想要的是让 vt100 代码正常工作,这似乎是一个与解释转义序列不同的问题。例如: echo -e "\033[31mHello World\033[0m" 在监视下即使使用单引号也不能正常工作。
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 2017-04-21
  • 2021-01-15
  • 1970-01-01
相关资源
最近更新 更多