常に内容を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