どのように私はwatchコマンドは、VT100シーケンスを解釈することができますか?
質問
(赤で表示)この単純な例を考える:
ログイン
echo -e "\033[31mHello World\033[0m"
これは赤で正しく端末に表示されます。今考える:
watch echo -e "\033[31mHello World\033[0m"
これは、色を表示しません。
注:私はそれをクリアして再実行して、基本的な動作を模倣ループを書くのは簡単であることを承知しています。しかし、明確な操作は、時計の下で起こらない、フラッシュの画面を引き起こし
EDIT:。もともとこの質問指定されたエスケープシーケンスではなく、VT100シーケンスが、それは私が後だし、単一引用符で解決しました本当にではありません。
解決
の編集の
watch
サポート色のより新しいバージョン。あなたは、問題の例の特定の状況での引用符やエスケープを維持するために引用の余分なレベルを使用する必要があります:
watch 'echo -e "\033[31mHello World\033[0m"'
man watch
から:
-c, --color Interpret ANSI color sequences.
以前の の
man watch
から:
非印字文字はプログラム出力から取り除かれます。 「猫の-v」を使用します コマンドパイプラインの一部として、あなたはそれらを見たい場合ます。
しかし、彼らは解釈されませんので、私はどのような方法がないと思う。
他のヒント
のUbuntu 11.10上の man watch
0.3.0 ののwatch
から:
デフォルトの時計によっては、通常、あなたが-Cまたは--colorオプションを使用している場合しかし、その後、見フォアグラウンドのANSIカラーシーケンスを解釈する、文字をエスケープ渡しません。
私の端末でごリテラル文字列で動作するようには思えないが、これらの作品ます:
watch --color 'tput setaf 1; echo foo'
watch --color ls -l --color
あなたはあなたのコマンドを引用単一試すことができます:
watch 'echo -e "\tHello World"'
私のマシンでは、これは最初の文字として-e
、かつ正確にタブ付きhello world.
で私を残し
-e
は、エコーの私のバージョンのデフォルトであるようです。それでも、それは正しくタブ付きhello world
に向けた進展がある
:
何が起こるかというと、二重unquotingです 見るものの時計
echo -e "\033[31mHello World\033[0m"
時計によって呼び出されたシェルは何を参照してください。
echo -e \033[31mHello World\033[0m
そして、バックスラッシュが引用された場合であっても、遊びに来て、それが引用悪夢になります。