teeにすべてのファイル記述子を画面に印刷し、標準出力のみをファイルに保存するように指示する方法はありますか?

teeにすべてのファイル記述子を画面に印刷し、標準出力のみをファイルに保存するように指示する方法はありますか?

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.

関連情報