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

FJC*_*FJC 9 command-line io-redirection stdout

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

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

prog1 prog2 > outfile.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*itt 18

很有可能prog1将其输出写入标准错误。您可以将两个输出重定向到一个文件

prog1 prog2 > outfile.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

或者你可以分割输出

prog1 prog2 > outfile.txt 2> errors.txt
Run Code Online (Sandbox Code Playgroud)

这不会分离单个程序的输出,而是分离输出通道。请参阅shell 的控制和重定向运算符是什么?详情。

如果您查看prog1的文档,您可能会找到一个选项,告诉它改为将其输出存储在命名文件中。例如,对于strace

strace -o strace.txt prog2 > outfile.txt
Run Code Online (Sandbox Code Playgroud)

会将strace输出存储strace.txtoutfile.txt.

  • `2>&1` 必须 *after* `> outfile.txt`。重定向的顺序很重要。 (5认同)