stderrをstdoutに永久にリダイレクトする

stderrをstdoutに永久にリダイレクトする

多くのコマンドを含むbashスクリプトがあり、その一部はエラーメッセージを生成する可能性があります。多くの場合、エラーメッセージと出力メッセージは間違った順序で混在しています(たとえば、コマンド#2の出力を見て、コマンド#1のエラーメッセージを表示します)。

私が理解しているように、その理由は、これらのコマンドが2つの出力ストリーム(stdoutとstderr)を使用し、それぞれ非同期にコンソールに印刷されるためです。したがって、1つの解決策は、各コマンドの後に「2>&1」を追加してstderrをstdoutにリダイレクトすることです。

しかし、コマンドが多いので、すべて一度実行することをお勧めします。すべての出力が正しい順序で表示されるように、すべてのコマンドのすべてのエラーメッセージがstdoutにリダイレクトされるようにスクリプトの先頭に配置できるコマンドはありますか?

答え1

私はそうではありませんが、かなり標準出力ストリームとエラーストリームが2つ以上の非同時コマンド間でどのように混在するかを確認するには、スクリプトの先頭にある単一のコマンドを使用して、両方の出力ストリームを同じ場所にリダイレクトできます。

exec 2>&1

あるいは、リダイレクトを通じてスクリプトを起動することもできます。

./myscript.sh 2>&1

個人的には、この「機能」を簡単にオンまたはオフにする2番目のオプションを選択します。

関連情報