从两个程序中重定向标准输出


9

我正在C ++代码(prog2)上运行内存检查工具(prog1),这两者都给了我巨大而详细的输出。为了消除一些错误,我需要将此输出保存到文件中。

我尝试将标准输出重定向到文件:

prog1 prog2 > outfile.txt

但这给了我一个文件,其中包含prog2的输出,而prog1的输出仍将到达终端。

有人知道一种方法来指定我希望两个输出都转到一个文件吗?喜欢(prog1 prog2) > outfile.txt吗?

Answers:


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

将来的读者注意:@Barmar是绝对正确的,重定向的相对顺序相互之间很重要。对于那些不太熟悉的人,仅在少数情况下才对程序参数进行重定向。开始和结束是常见的位置,但是中间有时也会发生(请不要这样做)。echo >&2 hello world等同于echo hello world >&2。此处的更多信息:tldp.org/LDP/abs/html/io-redirection.html
Morgen,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.