unixコマンド「watch」を使用した色?


回答:


145

の新しいバージョンの一部は、watch色をサポートしています。

例えばwatch --color ls -ahl --color

関連


3
見て取る:superuser.com/questions/125469/...(最初の答えを) -たぶん、あなたはあなたの答えでそれをリンクすることができます。
aatdark

11
私が使用するためにここに来たwatchgit diff。FWIWは、それはあなたが合格する必要が動作するように取得するため--color=alwaysgit diff(例えばwatch --color git diff --color=always
theabraham

31

使用しないwatch...ウォッチプログラムを使用すると、端末に書き込みを行っていないことを検出して、色を取り除くことができます。制御コードをそこに保持するには、特定のプログラムフラグを使用する必要があります。

フラグがわからない場合やない場合は、次の方法で貧しい人の男を監視させることができます。

while sleep <time>; do clear; <command>; done

ちらつきは少しありますが(時計は「ダブルバッファリング」で動作します)、一部のものについては十分に役立ちます。

あなたはダブルバッファーの貧しい男の時計を使用して誘惑するかもしれません

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done

しかし、「端末に書き込んでいない」機能をもう一度押します。


多分andのwhile sleep <time>; do clear; <command> | tee /tmp/file; done代わりに使用>catますか?
アンドレレリア2017年

うーん@AndréLeriaを取得できません... | tシャツはwatchdoのようなカラーコードを削除し、コマンドのちらつきを防ぎません
theist

これは2番目の例の提案ですが、これも色を与えません。それとも何か間違っているのですか?
アンドレ・Leria

1
@AndréLeria2番目の「例」は間違った例です(下の行で言ったように)。重要なのは、パイプにぶつかると、ターミナルに書き込んでいないため、カラーコードが失われるということです。それは間違っているが、はっきりと仕事へのパイプを使用して、ターゲット・コマンド実行の間の時間経過によるちらつきを補償するようにバッファリングしようとする方法を示すことがあるwatch
有神論

4
bashの場合:while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done-シェルのビルトインのみを使用して画面をクリアし、出力を表示するため、ちらつきが最も少なくなります。
ゲーザTörök

18

基本的な飾り気のない操作をwatch数行のシェルスクリプトに複製できます。

$ cat cheapwatch 
#!/bin/sh

# Not quite your Rolex

while true ; do
  clear
  printf "[%s] Output of %s:\n" "$(date)" "$*"
  # "$@" <- we don't want to do it this way, just this:
  ${SHELL-/bin/sh} -c "$*"
  sleep 1  # genuine Quartz movement
done

$ ./cheapwatch ls --color  # no problem

最終的に、非常に賢い誰かtrがこのスクリプトにコマンドをハッキングして、制御文字を取り除き、ユーザーに--colorそのロジックを無効にするように強制します。とりあえず、この実装の純粋な初心者は、色を食べるモンスターを遠ざけています。

オプションwatchがない状況で--color、何らかの理由でパッケージをアップグレードできない場合は、これを投入することができます。


8

はい

時計はカラー出力で動作します。それは、(少なくとも、Debianの中で)ここにあなたの質問のためにバグ報告しているprocpsのパッケージの一部であるhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 あなたはprocpsのを更新する必要があることを、彼らは答えて、パッケージ

例えばubuntu 11.04では、このパッケージはhttp://packages.debian.org/wheezy/procpsで動作します

tl; dr

更新プロセス


8

他の回答でこの問題を解決できますが、これを達成する最も簡単な方法はunbufferツールを使用することです。使用するには、次のようにします。

$ watch --color 'unbuffer <your-program>'

この方法では、プログラムの制御シーケンス有効化フラグを探す必要はありません。ただし、注意点は、お使いの時計のバージョンが--colorフラグをサポートする必要があることです。

を使用して、DebianまたはUbuntuにunbufferをインストールできsudo apt-get install expectます。


'unbuffer <command>'-使用する特定のコマンドを指定せずに、これが質問にどのように答えますか?
ダノラム

@Danoram何が不明瞭ですか?<command>色で実行したい特定のプログラムで置き換えるのに助けが必要ですか?
アバマンダー

@Avamander質問にフラグが付けられたので、私はそのコメントを書いたでしょう。編集履歴を確認すると、作成者が回答を更新したことがわかります。何も不明確ではありません。私のコメントはもう関係ありません..
ダノラム

1

時計のマニュアルから:

非印刷文字はプログラム出力から削除されます。表示したい場合は、コマンドパイプラインの一部として「cat -v」を使用します。

使い方はわかりません。


5
これにより、制御文字が色付けされるのではなく、出力に表示されます。たとえば、最初の行をwatch -c "ls --color|cat -v"示します^[[0m^[[01;34mAgent^[[0m
Drew Noakes、

1
試してみるwatch --color ls --color=always .
Zhang LongQI
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.