Linux bash程序;手表;以及输出中的ANSI转义序列
可能重复:Linux bash程序;手表;以及输出中的ANSI转义序列,linux,bash,watch,ansi-escape,Linux,Bash,Watch,Ansi Escape,可能重复: 在我的一个程序中,我想使用彩色文本作为输出,因此我使用ANSI转义序列,例如: echo -e '\033[34mHello World\033[0m' 它以蓝色打印“Hello World”。 (实际上,它是一个使用“print”的Python程序,但这与问题无关) 现在我想使用bash程序“watch”重复执行该程序。但是当我使用“watch”执行与上面相同的行时,即 文本不是蓝色的,输出变成“-e 033[34mHello World033[0m”。因此,ANSI转义序列不
在我的一个程序中,我想使用彩色文本作为输出,因此我使用ANSI转义序列,例如:
echo -e '\033[34mHello World\033[0m'
它以蓝色打印“Hello World”。
(实际上,它是一个使用“print”的Python程序,但这与问题无关)
现在我想使用bash程序“watch”重复执行该程序。但是当我使用“watch”执行与上面相同的行时,即
文本不是蓝色的,输出变成“-e 033[34mHello World033[0m”。因此,ANSI转义序列不知何故没有被解码
有没有办法让程序“监视”尊重转义序列,或者有没有替代“监视”的方法来获得相同的效果
如果它只在Linux上工作就可以了,因为我只使用它
更新:所以一个解决方案是安装一个更新版本的“watch”,它知道--color选项。但是有没有其他方法,可能是一个类似于“watch”的程序呢?(我不是那台机器的管理员。)颜色选项对我来说很有用
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
根据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”选项…是的,谢谢,但我刚刚发现我有一个旧版本的“watch”没有--color选项。但这确实是解决问题的方法。啊哈。我认为这太简单了。嗯,你的第二个解决方案并不理想,因为它会闪烁屏幕,这有点讨厌(我的程序在显示结果之前需要一段时间)。但是你的回答仍然非常感谢。啊,但是如果我在清除屏幕之前缓存我的程序的结果,我会获得想要的效果:-而[1];do a=$(execute_where);clear;echo$a;sleep 2;done-我认为这对我来说很有效,我只是用一个小脚本(cwatch?)来包装它这就是:)也相关的是AFAIK,
watch
不是bash
shell内置程序,而是/usr/bin/watch
可执行程序。谢谢,我相应地更改了标题
#!/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