Bash Bug?从两个流程替换中获取STDOUT

时间:2016-08-30 12:49:33

标签: bash

对于特定的shell脚本,我需要一个类似于这个简化示例的功能:

{ replies=`echo output > >(cat >&3; echo reply1) 2> >(cat >&2; echo reply2)` ;} 3>&1

很明显,我希望$replies类似于reply1 reply2,但是"第二个&#34}。流永远不会进入变量但是出现在STDOUT:

output
reply2
$ echo $replies 
reply1

这是一个错误或限制,我该如何解决它?

1 个答案:

答案 0 :(得分:2)

交换重定向顺序可修复"问题":

$ { replies=$(echo output  2> >(cat >&2; echo reply2) > >(cat >&3; echo reply1)); } 3>&1
output
$ echo $replies
reply1 reply2

"问题"在您的示例中,执行cat >&2; echo reply2时,标准输出已重定向到>(cat >&3; echo reply1)。因此,echo reply2的输出转到cat >&3