This post基本上会问相同的问题,但我需要一个附加要求,即:退出代码应保持不变。

接受的答案使用管道,因此退出代码不再是command1的退出代码。

命令集pipefail不适合我的需要,因为我不想影响执行command1时的行为,这可能是复合Bash命令本身。

我尝试了以下方法,但是输出不符合预期:

[hidden]$ (echo haha; echo hehe 1>&2) > >(while read -r x; do echo "xx $x"; done)
2> >(while read -r y; do echo "yy $y"; done)
xx haha
xx yy hehe


谁能告诉我为什么?

最佳答案

This was answered早在2012年。原因是替换是
并非同时完成所有操作。一种解决方法是使stderr与stderr保持一致。

foo > >(baz) 2> >(qux 1>&2)

关于linux - 将stdout和stderr重定向到其他程序,而无需更改退出代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27328692/

10-13 09:37