Bash Bug?从两个进程替换中获取标准输出
对于特定的shell脚本,我需要一个类似以下简化示例的功能:Bash Bug?从两个进程替换中获取标准输出,bash,Bash,对于特定的shell脚本,我需要一个类似以下简化示例的功能: { replies=`echo output > >(cat >&3; echo reply1) 2> >(cat >&2; echo reply2)` ;} 3>&1 很明显,我希望$reply类似于reply1 reply2,但“第二个”流从未进入变量,而是在STDOUT中出现: output reply2 $ echo $replies reply1 这可能
{ replies=`echo output > >(cat >&3; echo reply1) 2> >(cat >&2; echo reply2)` ;} 3>&1
很明显,我希望$reply
类似于reply1 reply2
,但“第二个”流从未进入变量,而是在STDOUT中出现:
output
reply2
$ echo $replies
reply1
这可能是一个错误或限制,我如何解决它?交换重定向顺序修复了“问题”:
示例中的“问题”是当
cat>&2;执行echo reply2
时,标准输出已重定向到>(cat>&3;echo reply1)
。因此,echo reply2
的输出转到cat>&3
我实际上认为我在不久前测试过,但它不起作用。。。但很明显我错了,这对我来说很好。也谢谢你的解释,我现在甚至明白为什么会这样。
$ { replies=$(echo output 2> >(cat >&2; echo reply2) > >(cat >&3; echo reply1)); } 3>&1
output
$ echo $replies
reply1 reply2