158

表示色を使用するコマンドもありますが、時計で使用すると色が消えます。

watch -n 1 node file.js

どういうわけか色を元に戻すことは可能ですか?

4

8 に答える 8

200

現在の一部の新しいバージョンはwatchカラーをサポートしています。

たとえばwatch --color ls -ahl --color

関連

于 2010-09-25T14:37:18.633 に答える
49

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

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

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

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

あなたはダブルバッファリングされた貧乏人の時計を使用して作りたくなるかもしれません

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

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

于 2016-11-28T16:50:35.940 に答える
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

于 2016-05-27T01:03:14.107 に答える
18

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

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

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

を使用して、DebianまたはUbuntuにアンバッファをインストールできますsudo apt-get install expect

于 2019-11-11T21:40:25.530 に答える
8

はい

時計はカラー出力で動作します。これは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を更新します

于 2011-12-10T17:32:25.457 に答える
2

時計のマニュアルから:

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

でも、使い方がわかりません。

于 2010-09-25T09:00:08.180 に答える
1

watch まだ8ビット以上の色をサポートしていないことは注目に値します。

代わりに、追加する必要があるようlsなより現代的なものを使用する場合(機能すらしません)。常に3ビットカラー(ソース)を使用するため、すぐに使用できます。bat--theme=ansi--theme=base16git log

例:

watch --color -d -n 0.5 'mycommand file | bat --color=always --theme=ansi'
于 2021-09-18T00:23:33.880 に答える
1

コマンドにカラー出力を強制するオプションがない場合、他の回答が機能しない可能性があります。または、私のように怠惰で、各コマンドのマニュアルを参照して正しい設定を見つけたくない場合もあります。私はいくつかの異なるテクニックを試しました:

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

スクリプトは色の問題を修正しますが、別のバグが残ります。コマンド出力の行が短くなった場合、残りの行は必ずしも消去されないため、出力が実際と一致しない可能性があります。

于 2021-09-30T08:31:29.863 に答える