在我的一个程序中,我想使用彩色文本作为输出,所以我使用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”。但还有其他任何方式,也许是一个类似的“观看”节目? (我不是那台机器的管理员。)
答案 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”选项......