パイプラインの中央にある制御端子

パイプラインの中央にある制御端子

パイプを介して接続された3つのコマンドがあるとします。

A | B | C

Bはエラーメッセージをstderrに出力し、いくつかの進捗状況を端末に出力したいと思います。 stderrが端末と同じであれば簡単です。進捗情報をstderrに送信するだけです。しかし、stderrがリダイレクトされるとどうなりますか?

A | B 2>/tmp/file | C

その後、進捗情報を端末に送信したいのですが、エラーメッセージはファイルに送信されます。

これでリダイレクトされていない場合は、stderrが終了した端末を何とか識別できますか?

私の最初の考えは、使用するttyを見つけてtty開いてそこに書き込むことでした。しかし、ttyB内でttysay:を呼び出すと、not a ttyこれはAとBの間のパイプが原因だと思います。

Perlを使ってこれをやりたいです。

答え1

Linux関連:

echo |perl -e '$p=getppid; `echo foo > /proc/$p/fd/2`'

ここで stderr をリダイレクトすると、 'foo' は端末に印刷されます。

echo |perl -e '$p=getppid; `echo foo > /proc/$p/fd/2`' 2>/dev/null

関連情報