私は、あらかじめ定義されたデータセットを処理してファイルに出力するスクリプトを作成しています。私は1つのデータム(アクセスしたすべてのセットで常に「通常」である)が、この値が処理されていない(データにどのように影響するかわからないので)ということが違うと警告をポップアップしたい。この警告をstderrまたはstdoutに出力すべきですか?STDERRまたはSTDOUTに警告を出力する必要がありますか?
21
A
答えて
27
このスクリプトの出力(つまりstdoutのみ)を後で処理できるように保存した場合、その警告は出力の解析方法を妨げますか?さらに、出力が別のプロセスにパイプされている場合は、警告が端末に表示されるため、ユーザはすぐにそれを認識します。
これらの理由から、一般に、警告はstderrに出力されます。
1
実際の質問は、あなたのスクリプトの出力をファイルにリダイレクトする場合、その警告をファイルに入れるか、ユーザーに指示するかです。
警告の結果、ユーザーが何らかの処置を取ることを期待している場合は、STDERRに進む必要があります。一部のダウンストリームスクリプトが警告によってトリップされる可能性が高い場合は、STDERRに移動する必要があります。
4
警告はstderrに送られます。
他人から提示された点に加えて(ダウンストリームプロセスの解析エラーを引き起こし、コンソールのユーザーからエラーを隠す)、柔軟性の問題があります。
stderrの警告をstdoutを解析しているダウンストリームプロセスに移動させたくない場合、ユーザーは特別な操作を行う必要はありません。
your_script | downstream_process
ユーザーが標準エラー出力からの警告は、stdoutとstderrを解析する下流のプロセスに行きたい場合は、ユーザーが標準出力に標準エラー出力をリダイレクトする2> & 1を使用することができます。
your_script 2>&1 | downstream_process
stdoutに警告し、任意の通常のデータの両方あなたが出力した場合、ユーザーはすべてのものを解析することなく、データからの警告を分離する良い方法はありません。 警告をstderrに送ると、スクリプトの柔軟性も向上します。
だから、関係なく、stderrに行く必要がありますか?あるいは、STDERRへの2つの参照のうちの1つをSTDOUTにするつもりでしたか? –
私は両方でSTDERRを意味しました。彼らはあなたがかなりstderrにそれを送る必要がある2つのケースです。私がそれを標準出力にしたいと考えることができる唯一の時間は、スクリプトの出力が人間の消費のためであるかどうかです(多分出力を電子メールで誰かに見せて、それを調べることです)。 stderrをリダイレクトするのを覚えておく必要はありません。 – Martin