既存シェルのリダイレクト/grep STDOUT

既存シェルのリダイレクト/grep STDOUT

進行状況をSTDOUTSTDOUTgrep

質問:プロセスを停止せずに他のプロセスに接続する方法はありますかSTDOUT

常にOS X 10.7.3のZSHにあるGNU画面で実行されます。

答え1

スマートな人がいます。ハッカー言及するここGDBを使用してプロセスに接続し、ファイルをdupxこれがこの機能を要約したものです。

~からdupx マンページ:

Dupxは、実行中のプログラムのファイルを再マップする簡単なユーティリティです。 Bashなどのシェルでは、>, < -同様の構文を使用してプログラムの起動時に簡単に入力/出力/エラーリダイレクトを許可します。例:echo 'redirect this text' > /tmp/stdout出力echo/tmp/stdout

ただし、標準シェルは、開始されたプロセスの出力(または入力またはエラー)を再マッピング(リダイレクト)する機能を提供しません。 Dupxはdup(2)内部システムコールを使用してこの問題を解決しようとしますgdb(1)。 Dupxは現在、gdbスクリプト用の単純なシェルラッパーとして実装されています。

答え2

画面logコマンド(!)を使用してください。

プロセスはすでにscreenセッションで実行されているので、そのウィンドウの出力を記録するようにscreenに指示するだけです。

スクリプトウィンドウに切り替えてC-a H録音します。
これで、次のことができます。

$ tail -f screenlog.2 | grep whatever

画面のマニュアルページから:

録音[オン|オフ]

現在のウィンドウの出力をウィンドウのメインディレクトリにある "screenlog.n"ファイルに書き込みを開始/停止します。ここで、nは現在のウィンドウの番号です。このファイル名は、「logfile」コマンドを使用して変更できます。引数が指定されない場合は、ロギング状態を切り替えます。ファイルがすでに存在する場合、セッションログはファイルの前の内容に追加されます。現在のコンテンツとロールバック履歴の内容はセッションログには含まれません。デフォルトは「オフ」です。

関連情報