2つのプログラムからのstdoutのリダイレクト


9

私はC ++コード(prog2)でメモリチェックツール(prog1)を実行しています。どちらの方法でも、膨大で詳細な出力が得られます。いくつかのバグを追跡するために、この出力をファイルに保存する必要があります。

stdoutをファイルにリダイレクトしてみました:

prog1 prog2 > outfile.txt

しかし、それによってprog2の出力を含むファイルが得られますが、prog1の出力はまだターミナルに送られます。

誰もが両方の出力をファイルに移動するように指定する方法を知っていますか?のように(prog1 prog2) > outfile.txt

回答:


19

prog1出力を標準エラーに書き込む可能性は十分にあります。両方の出力を単一のファイルにリダイレクトできます

prog1 prog2 > outfile.txt 2>&1

またはあなたはで出力を分割することができます

prog1 prog2 > outfile.txt 2> errors.txt

これは、個々のプログラムの出力を分離するのではなく、出力チャネルを分離します。シェルの制御およびリダイレクト演算子とは何かを参照してください詳細については。

prog1のドキュメントを見ると、代わりに出力を名前付きファイルに保存するように指示するオプションが見つかるかもしれません。たとえばstrace

strace -o strace.txt prog2 > outfile.txt

straceの出力をに保存しstrace.txt、標準出力にすべてを書き込みますoutfile.txt


5
2>&1 に行かなければならない> outfile.txt。リダイレクトの順序は重要です。
Barmar 2018

将来の読者への注意:リダイレクトの相対的な順序が相互に関係することは、@ Barmarが完全に正しいことです。あまり馴染みのない人にとっては、プログラムの引数に関するリダイレクトの順序が重要になるのはごく一部の場合に限られます。開始と終了は共通の場所ですが、途中で発生することもあります(これを行わないでください)。echo >&2 hello worldと同等echo hello world >&2です。詳細はこちら:tldp.org/LDP/abs/html/io-redirection.html
Morgen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.