bash-program“watch”和输出中的ANSI转义序列

时间:2012-11-30 05:19:34

标签: linux bash watch ansi-escape

  

可能重复:
  Colors with unix command “watch”?

在我的一个程序中,我想使用彩色文本作为输出,所以我使用ANSI转义序列,例如像这样:

echo -e '\033[34mHello World\033[0m'

以蓝色打印“Hello World”。 (实际上它是一个使用“print”的Python程序,但这对问题无关紧要)

现在我想使用bash程序“watch”重复执行程序。但是当我使用“watch”执行与上面相同的行时,即

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

文本不是蓝色,输出变为“-e 033 [34mHello World033 [0m”。因此ANSI转义序列不会以某种方式解码。

有没有办法让程序“观察”尊重转义序列,还是有“观察”的替代品来获得相同的效果?

如果它仅适用于Linux,那就没关系,因为我只使用它。

更新:因此,一个解决方案是安装一个知道--color选项的更新版本的“watch”。但还有其他任何方式,也许是一个类似的“观看”节目? (我不是那台机器的管理员。)

2 个答案:

答案 0 :(得分:5)

--color选项对我有用。

watch --color -n 1 "echo -e '\033[36mHello World\033[0m'"

或者,如果没有颜色选项,本土手表怎么样:

while [ 1 ]; do clear; echo -e '\033[36mHello World\033[0m'; sleep 1; done

答案 1 :(得分:5)

根据ddoxey的回答,我写了一个小脚本“cwatch”,它解决了我的问题:

#!/bin/bash
# do something similar to "watch", but enable ANSI escape sequences for colors
# obsolete if new version of "watch" is available which has the --color option
# 2012-11-30

while [ 1 ]
do
  output=$(eval $@)
  clear
  echo -e "$output"
  sleep 2
done

我仍然可以添加“--delay”选项......