10

重複の可能性:
unix コマンド「watch」を使用した色?

私のプログラムの 1 つで、色付きのテキストを出力として使用したいので、たとえば次のように 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でのみ動作する場合は問題ありません。

更新:したがって、解決策の 1 つは、 --color オプションを認識している新しいバージョンの「watch」をインストールすることです。しかし、他の方法、おそらく「見る」ための同様のプログラムはありますか? (私はそのマシンの管理者ではありません。)

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 に答える