表示色を使用するコマンドもありますが、時計で使用すると色が消えます。
watch -n 1 node file.js
どういうわけか色を元に戻すことは可能ですか?
使用しないでくださいwatch
...時計プログラムを使用すると、端末に書き込んでいないことを検出して、色を取り除くことができます。制御コードをそこに保持するには、特定のプログラムフラグを使用する必要があります。
旗がわからない場合や旗がない場合は、貧しい人に次の方法で監視させることができます。
while sleep <time>; do clear; <command>; done
少しちらつきがありますが(時計は「ダブルバッファリング」で動作します)、一部の機能には十分に役立ちます。
あなたはダブルバッファリングされた貧乏人の時計を使用して作りたくなるかもしれません
while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done
しかし、その後、「端末に書き込んでいない」機能をもう一度押すことになります。
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
他の答えがこの問題を解決しますが、これを達成する最も簡単な方法はunbuffer
ツールを使用することです。使用するには、次のようにします。
$ watch --color 'unbuffer <your-program>'
このようにして、プログラムのフラグを有効にする制御シーケンスを探す必要はありません。ただし、注意点は、ご使用のバージョンの時計が--color
フラグをサポートしている必要があるということです。
を使用して、DebianまたはUbuntuにアンバッファをインストールできますsudo apt-get install expect
。
はい
時計はカラー出力で動作します。これはprocpsパッケージの一部です(少なくともdebianでは)ここにあなたの質問に対するバグレポートがありますhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 そこで彼らはprocpsを更新する必要がありますパッケージ
たとえば、ubuntu 11.04では、このパッケージはhttp://packages.debian.org/wheezy/procpsで動作します
tl; dr
procpsを更新します
時計のマニュアルから:
印刷されない文字は、プログラム出力から削除されます。それらを表示したい場合は、コマンドパイプラインの一部として「cat-v」を使用してください。
でも、使い方がわかりません。
watch
まだ8ビット以上の色をサポートしていないことは注目に値します。
代わりに、追加する必要があるようls
なより現代的なものを使用する場合(機能すらしません)。常に3ビットカラー(ソース)を使用するため、すぐに使用できます。bat
--theme=ansi
--theme=base16
git log
例:
watch --color -d -n 0.5 'mycommand file | bat --color=always --theme=ansi'
コマンドにカラー出力を強制するオプションがない場合、他の回答が機能しない可能性があります。または、私のように怠惰で、各コマンドのマニュアルを参照して正しい設定を見つけたくない場合もあります。私はいくつかの異なるテクニックを試しました:
script
コマンド_スクリプトコマンドは、対話型ターミナルセッションによって実行された出力をキャプチャします。--color
のパラメータの組み合わせでwatch
、色を保持します。
watch --color "script -q -c '<command>' /dev/null"
-q
はクワイエット用、-c
はコマンド用、/dev/null
はログファイルです。stdoutも出力を表示するため、これは必要ありません。
編集:これはこれまでのところ最良のオプションです。興味がある場合は、以下の以前のソリューションを残しました。
一部の人が示唆しているように、とを使用した単純なwhileループをclear
使用sleep
して、出力をキャプチャせずにターミナルでコマンドを実行できます。これにより、通常、clear
すべての文字が削除され、コマンドが新しい出力を1行ずつ印刷するのに時間がかかるため、ちらつきが発生します。
幸いなことに、を使用していくつかの巧妙な端末のトリックでこれを修正できますtput
。新しい出力を上に書き込む間は、古い出力を表示したままにしておきます。
スクリプトは次のとおりです。
#!/bin/sh
trap "tput cnorm" EXIT # unhide the cursor when the script exits or is interrupted
# simple interval parameter parsing, can be improved
INTERVAL=2s
case $1 in
-n|--interval)
INTERVAL="$2"
shift; shift
;;
esac
clear # clear the terminal
tput civis # invisible cursor, prevents cursor flicker
while true; do
tput cup 0 0 # move cursor to topleft, without clearing the previous output
sh -c "$*" # pass all arguments to sh, like the original watch
tput ed # clear all to the end of window, if the new output is shorter
sleep "$INTERVAL"
done
スクリプトは色の問題を修正しますが、別のバグが残ります。コマンド出力の行が短くなった場合、残りの行は必ずしも消去されないため、出力が実際と一致しない可能性があります。