对于特定的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
这是一个错误或限制,我该如何解决它?
答案 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
。