stderrはstdoutにリダイレクトされません。

stderrはstdoutにリダイレクトされません。

TACACS+サーバーデバッグ情報をに送信します。このデバッグ情報から特定のデータをstderr収集しようとしているので、次にstderrリダイレクトしますstdout。ただし、実行すると出力がまったく表示されないため、tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1実際には実行されないようです。一方、期待どおりに動作します。stdouttac_plus -f /usr/local/etc/tac_plus.cfg 2>&1 | cat( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'

$ ( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'
BLAH
$ 

誰かがこの動作を説明できますか?シェルはbashバージョン4.2.37です。

ベストアンサー1

私たちが見ると源泉report()メッセージを印刷するために使用される関数をstderrに書き込むかsyslog(3)書き込むように設定できることがわかります。また、設定したログ記録のレベルによって異なります。コマンドが書き込みまたはsyslog呼び出しを実行しているかどうかを確認できます。たとえば、次のようになります。

strace -e write,connect -o /tmp/out tac_plus ...

tmpファイルで、類似または異なる数値を含む行を見つけます。おそらく、stdoutの場合は1、stderrの場合は2、ソケットを開いて書き込みを実行するため、3つ以上になる可能性がwrite(1,...あります。syslogconnect()

おすすめ記事