screen コマンドを使用した画面ログのフィルタリング

screen コマンドを使用した画面ログのフィルタリング

Ctrl+ A、、を押すとコマンドの出力をH記録できます。screenしかし、出力ファイルが大きすぎます。grep同様のフィルタを適用して記録される内容を制御できますか?

たとえば、フレーズを含む行のみを記録したい場合がありますfoo bar

答え1

興味深い質問です。見た目だけ見たman screenので、外部ツールを使わなくても可能かどうかは分かりません。ただし、名前付きパイプとtailとgrepの組み合わせを使用してこれを実行できます。

$ mkfifo /tmp/fifo/fifo
$ tail -f /tmp/fifo/fifo | grep --line-buffered bar >> /tmp/DONE

内部screen作業:

logfile /tmp/fifo/fifo

録音を始めてください。記録が完了すると、含まれている行のみbarに保存されます/tmp/DONEman fifo

FIFO特殊ファイル(パイプという名前)は、ファイルシステムの一部としてアクセスされることを除いて、パイプに似ています。読み取りまたは書き込みのために複数のプロセスで開くことができます。プロセスがFIFOを介してデータを交換すると、カーネルはすべてのデータをファイルシステムに書き込むことなく内部的に渡します。したがって、FIFO 特殊ファイルにはファイルシステムに内容がありません。ファイルシステムエントリは、プロセスがファイルシステムでその名前を使用してパイプにアクセスできるようにするための参照ポイントとしてのみ機能します。

これは/tmp/fifo/fifo、ディスク領域を占有しないことを意味します。この解決策は私には効果がありましたが、どのような欠点や欠点があるのか​​わかりません。

編集する:

次のものをfifo使用することをお勧めしますman script

-f, --flush 各書き込み後に出力をフラッシュします。これはリモートコラボレーションに役立ちます。一人の人が「mkfifo foo」を実行できます。 script -f foo'、もう 1 つは 'cat foo' を使用して、実行中の操作をリアルタイムで監視できます。

知らないなら、スクリプト端末セッションも記録するユーティリティです。

関連情報