以前の出力を消去せずにGNUウォッチ

以前の出力を消去せずにGNUウォッチ

ヌーwatchは、プログラム出力を検査するのに非常に便利なツールです。プログラムを実行し、2 秒ごとに出力を全画面で表示します。

場合によっては、以前の出力を消去するのではなく、タイムスタンプ付きで行ごとに印刷したいことがあります。そのためには、次のような bash スクリプトを使用します。

while true; 
    do echo -n "`date`   "; 
    ssh ubuntu@server -o ConnectTimeout=1 "uptime" ; 
    sleep 1; 
done

ありますかwatchコマンドを実行し、以前の出力を消去せずにその出力をタイムスタンプ付きで 1 行に表示できる のようなツールはありますか?

答え1

単純なループで見つけたと思いますが、ここからさまざまなことを行うことができます。

それを処理する関数を書く

function uberwatch {
    # call: uberwatch <interval> <command>
    while true; do
        "${@:2}";
        sleep $1;
    done
}

それをあなたの周りのどこかに保管することができます~/.bashrc

出力をファイルに記録しますが、表示は続けますwatch

watch "command | tee -a watchlog.log"

表示されるのは最新の実行結果のみですが、必要に応じて履歴ログを調べることができます。

答え2

true の場合; 実行 date >> /vat/tmp/watch.log; 600 をスリープ; ls -l ファイル名 >> /var/tmp/watch.log; 完了

私は上記のArtemが言及したwhileループが好きですが、戻ってきたときに分析できるようにデータをファイルに保存したいと考えていたため、ファイルにリダイレクトを追加しました。私の場合は、10分ごとにファイルを監視し、ls -lでファイルサイズを確認しています。

-ジェイ

答え3

私はオリのが好き修正されたwatch解決策しかし、後でログを調べるのではなく、リアルタイムでログを表示するというアイデアは気に入っています。

ここにアイデアがあります:

watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'

説明:

  • echodateとの間の改行を回避しますcommand
  • >>ファイルに追加します。 と同じですが、出力| tee -aに複製は行われません。watch
  • 2>&1stderr と stdout を組み合わせて、エラーを含むすべてが表示されるようにします。
  • | tail -n 1出力を最終行 (出力を含む行date) に制限して、よりクリーンなリアルタイム表示を実現します。ログ ファイルの内容がこれに適しているかどうかは、ユーザーによって異なります。

関連情報