Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash程序;手表;以及输出中的ANSI转义序列_Linux_Bash_Watch_Ansi Escape - Fatal编程技术网

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