web-dev-qa-db-ja.com

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

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

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

prog1 prog2 > outfile.txt

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

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

9
FJC

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

prog1 prog2 > outfile.txt 2>&1

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

prog1 prog2 > outfile.txt 2> errors.txt

これは個々のprograms '出力を分離するのではなく、出力チャネルを分離します。詳細は シェルの制御演算子とリダイレクト演算子は何ですか? を参照してください。

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

strace -o strace.txt prog2 > outfile.txt

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

19
Stephen Kitt