将C++生成的cerr和cout重定向到Ubuntu中的同一文件

gno*_*ule 1 c++ bash redirect cout stderr

我的程序生成的输出都指向std :: cout和std :: cerr.当我正常运行测试文件时

./a.out <source> &> <target>  
Run Code Online (Sandbox Code Playgroud)

target按照./a.out生成的顺序捕获两种类型的输出.

当尝试为简单的单元测试框架自动测试输出时,我在bash脚本中实现了上述内容:

 `rm $OUT_NAME`
 `./a.out $NEW_UNIT &> $OUT_NAME`   
Run Code Online (Sandbox Code Playgroud)

(带有明显的变量名称).发送到cout的输出打印正常; 但发送给cerr的那个打印不正确(有些打印;然后打印停止,没有错误).如果你想知道,我首先添加'rm'只是为了完全确定覆盖/附加到旧版本没有问题.

有任何想法吗?

我的系统:Ubuntu 12.04.

unx*_*nut 7

在bash中,您应该执行以下操作:

./a.out source > target 2>&1
Run Code Online (Sandbox Code Playgroud)

合并stderrstdout.你给出的命令是为了csh.

如果要合并stdoutstderr,你会做

./a.out source 2> target 1>&2
Run Code Online (Sandbox Code Playgroud)