stdoutに何も記録されていない場合にのみstderrを印刷し、そうでない場合はstdoutを印刷してstderrを破棄します。

stdoutに何も記録されていない場合にのみstderrを印刷し、そうでない場合はstdoutを印刷してstderrを破棄します。

常に内容をstderrとして印刷するコマンドがあります。これらの情報は、標準出力に何も記録されない限り、決して役に立ちません。

したがって、現在のstdout出力が空の場合にのみ古いstderr出力がstderrとして印刷されるように、コマンドでstdoutとstderrをフィルタリングしてパイプするのに役立つ単純なシェル方法、ツール、またはコマンドはありますか?それ以外の場合(stdoutが空でない場合)、stdoutにのみ印刷されますか?

答え1

これを一時ファイルにリダイレクトし、標準出力に書き込まれたものがあるかどうかを確認できます(スクリプトで)。

それはまるで

#!/bin/sh
mytemp=$(mktemp -d)
trap "rm -rf $mytemp" EXIT INT QUIT HUP
"$@" 2>$mytemp/error | tee $mytemp/output
[ -s $mytemp/output ] || cat $mytemp/error

関連情報