10

可能重复:
unix 命令“watch”的颜色?

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

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

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

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

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

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

有没有办法让程序“watch”尊重转义序列,或者有没有替代“watch”来获得相同的效果?

如果它只适用于 Linux 就可以了,因为我只使用它。

更新:所以一种解决方案是安装一个更新版本的“watch”,它知道 --color 选项。但是有没有其他方法,也许是一个类似的程序来“观看”?(我不是那台机器的管理员。)

4

2 回答 2

13

--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
于 2012-11-30T05:24:29.917 回答
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

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

于 2012-11-30T07:46:05.753 回答