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

Dan*_*ung 6 linux bash watch ansi-escape

可能重复:
使用unix命令"watch"的颜色?

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

echo -e '\033[34mHello World\033[0m'
Run Code Online (Sandbox Code Playgroud)

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

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

watch echo -e '\033[34mHello World\033[0m'
Run Code Online (Sandbox Code Playgroud)

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

有没有办法使程序"观察"尊重逃脱序列,或者是否有"观察"的替代方案来获得相同的效果?

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

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

ddo*_*xey 9

--color选项对我有用.

watch --color -n 1 "echo -e '\033[36mHello World\033[0m'"
Run Code Online (Sandbox Code Playgroud)

或者,在没有颜色选项的情况下,本土手表怎么样:

while [ 1 ]; do clear; echo -e '\033[36mHello World\033[0m'; sleep 1; done
Run Code Online (Sandbox Code Playgroud)


Dan*_*ung 6

基于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
Run Code Online (Sandbox Code Playgroud)

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