出力が標準出力か標準エラーかを判別


22

プロセスが出力しているものがstdoutまたはstderrであるかどうかを確認するにはどうすればよいですか?

回答:


22

プログラムがSTDOUTに出力するものとSTDERRに出力するものを決定する方法は3つしかありません。

  1. ドキュメントを読んでください。または

  2. リダイレクトを試す†

  3. STDERRを赤で印刷

†例えば:

program > program.stdout 2> program.stderr

次に、2つの出力ファイルを見て、プログラムがSTDOUTに書き込んだ内容と、STDERRに書き込んだ内容を確認します。

tee出力を画面とファイルに継続する必要がある場合は、リダイレクトの代わりにパイプすることができます。/programming//q/692000/477035を参照してください


15
通常、オプション3のバリエーションを使用しprogram | grep .ます。STDOUTを赤で出力します。
デニス

赤での印刷は、まさに私が探していたものです。ありがとうRedGrittyBrick&デニス
ラッフル

7

コメントしたリクエストに基づいて:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
印象的です。しかし、チェリーをツリーに追加して、それが何をしているのかを説明してくれませんか?ここの周りの誰もが第一人者であるわけではありません-そして、あなたの構成はかなり複雑です;)
Izzy

括弧は注文用です。私は実際にI-forget-whereからその正確な形式を取得しましたが、ポイントは余分なファイル記述子(1 = stdoutおよび2 = を超えるstderr)を使用してブラケットの内部セットの出力を取得し、stdout1つのsedコマンドを実行するstderrことです別のもの。
zebediah49

ワオ。これらの追加の記述子を使用することを知りませんでした。最初、私は少し混乱していました(自分が実行していることを理解するのが好きです-そして、中括弧と少し混乱しました)。しかし、今では明らかです-そして私見はOPがまさに望んでいたものです。だから私から+1 :)
イジー

これは私を助けました。stderrにさらにデータを追加したかった。これにより、すべてが適切にstdout / stderrに出力されます。{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
ブライアンドリューリー

0

stderrをファイルにリダイレクトするだけで、その中に何かが表示される場合は、stderrからのものです。

例えば ls -a 2> ls-all.txt

何らかの理由でstderrにエラーが送信された場合、このファイルにリダイレクトされます。


-1

一度オフにしたい場合は、それらのいずれかを別の場所にリダイレクトしてください。

例、標準出力をでリダイレクトし>ます。

ls -al> ls-l.txt(ここでの出力はstdoutからのものではありません。何か表示されている場合はstderr出力である必要があります)

stderrリダイレクト用 2>


プロセスは、出力の一定のストリームを作成します。一部は標準出力、一部は標準エラー出力になります。この出力が画面に表示されるときにどちらがどれであるかを判断したいと思います
-Rauffle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.