stdout
プログラムが複数のファイル記述子で印刷され、印刷中にすべての出力を観察する必要がありますが、ファイルにのみ保存する必要があるとします。どうすればいいですか?
答え1
3が興味のあるファイル記述子の1つであるとします。 3はを指すことができますfile
。たとえば、次のようになります。
exec 3>file
あなたのアプリケーションは3を書き込みます。
app() { echo hello world >&3; }
3を傍受するには、dup
それを別のファイル記述子(たとえば4)に転送する必要があります。
exec 4>&3
パイプを使用して3をインターセプタプロセスにリダイレクトします。これは元のターゲットに書き換える必要があり(それ以外の場合はインターセプタではなく)、fd 4に保存されます。
app 3> >(tee /dev/tty >&4) #this interceptor writes to the terminal
上記はhello world
端末に印刷され、file
最終的に終了する必要がありますhello world
。
これらすべては、プロセスを開始する前にこれらのファイル記述子がすでに開いていると仮定しています。実行時にファイル記述子の出力を動的に傍受するには、コードを変更するか、実行時に挿入するか、またはptrace
.