GNU/Linux >> Linux の 問題 >  >> Linux

画面にStderrのみを表示しますが、StdoutとStderrの両方をファイルに書き込みますか?

これを実現するためにBASHマジックを使用するにはどうすればよいですか?
画面にstderr出力のみを表示したいのですが、
しかし、stdoutとstderrの両方をファイルに書き込みたいのです。

明確化:
stdoutとstderrの両方を同じファイルにまとめたい。それらが発生する順序で。
残念ながら、以下の回答はどれもこれを行いません。

承認された回答:

リダイレクトがなくても、または>logfile 2>&1だけでも 、生成順に出力が表示される保証はありません。

手始めに、アプリケーションからのstdoutはラインバッファリング(ttyへ)またはバッファリング(パイプラインへ)されますが、stderrはバッファリングされないため、リーダーに関する限り、出力の順序間の関係は壊れています。作成できるパイプラインの後続のステージでは、2つのストリームへの決定論的に順序付けられたアクセスは取得されません(これらは概念的には並行して発生し、常にスケジューラーの対象になります-リーダーがスライスを取得するまでに、ライターがすでに持っている場合両方のパイプに書き込まれているため、どちらが先に来たかはわかりません。

「それらが発生する順序」は、アプリケーションにのみ実際に知られています。 stdout / stderr全体での出力の順序付けは、よく知られている-古典的な、おそらく-問題です。


Linux
  1. すべての出力を Bash のファイルにリダイレクトします

  2. stdout と stderr の両方にエコーする

  3. Linuxファイル記述子0 1 2がstdin、stdout、およびstderrではない可能性はありますか?

  1. 出力が stdout か stderr かを判別する

  2. bash:stderr をファイルにリダイレクトし、stdout + stderr を画面にリダイレクトします

  3. teeを使用してSTDERRおよびSTDOUTをファイルにキャプチャする

  1. プログラムの出力をリダイレクトし、それでもStdoutに送信する方法はありますか?

  2. Stderrのみをリダイレクトする方法は?

  3. リダイレクトとパイプ出力?