私はそれをさまざまな方法で見てstdout
使用stderr
しました。私が知る限り、それは一般的にstdout
一般的な情報やstderr
エラーなどに使用されます。ただし、stderr
プログラム自体に関する情報(エラー、警告、デバッグなどとは関係ありません)を出力し、デバッグ目的で使用することもあります(後者がフィルタリングできるようにエラーストリームを使用すると仮定します)。デバッグ)とstdout
含めるべきだと思うより深刻な警告がありますstderr
。
stdout
もしそうなら、これが理想的な使用と見なされるか、stderr
一般的な出力とエラーに加えて、プログラム出力に関連するのはいつであるか疑問に思います。プログラムに依存していますか、それとも一般的ですか?
答え1
とを分離する理由は、まずstdout
プログラムデータ出力(ファイルに保存したりパイプなどに供給することができる)と診断と毛羽立ち(stderr
端末の人間オペレータだけに興味がある)を区別するためです。 。 (入力に対して同じことを行う自動方法はありませんが、stdin
代わりに制御端末デバイスを開いて読み取る方法でいくつかの問題を経験して実行できます。)stdout
あります。)stderr
2>&1
bash
答え2
時々違うよ!関連要因は、stderr
障害が発生したときにエラーメッセージがバッファに解放されることを望まないため、デフォルトはバッファリングされないことです。一方、stdout
デフォルト値はライン(ターミナル)またはブロック(そうでない場合)バッファリングされます。エラーはデータ行またはブロックを失う可能性がありますが、このアプローチはより効率的です。もう一つは、プログラムが出力することです。何かがCSVやJSONなどの特定の形式をエクスポートしている場合は、エラーメッセージを混在させるとプログラムが破損する可能性があります(または特定の形式にエンコードする必要があり、その形式の場合)。 abort! abort! )、他の場合(対話型メニュータイプシステム?)エラーメッセージを他の出力と混在させることはそれほど重要ではありません。
答え3
誰かがある時点であなたのプログラムをパイプラインに入れると常に考えてください。
$ inputProducer | yourProgram | outputConsumer
stderr
またはに何かをターゲティングするかを検討する際にstdout
重要なのは、コンテンツが(一般的に)関連性があるのかoutputConsumer
、それともそれがあなたの人生をより困難にするのかということです。
- 関連:
stdout
- 無関係:
stderr
(より良いオプションにもかかわらず、人々がリダイレクトするのを忘れたため、多くのバグレポートが代わりに移動するstdout
ことに注意してください。)stderr
stderr