2016-08-30 10 views
1

からSTDOUTを取得、私はこの単純化された例のような機能が必要になります。バッシュバグ?特定のシェルスクリプトの場合は2個のプロセス置換

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

Obivously、私は$repliesreply1 reply2のようなものが、「第二」の流れは決してなりたいです変数に入るが、STDOUTに出る:

output 
reply2 
$ echo $replies 
reply1 

これはバグや制限事項ですが、どうすれば回避できますか?リダイレクトの順序を入れ替え

答えて

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になります。

+0

私は実際には以前のことをテストしていて、うまくいかなかったと思っていましたが、明らかに間違っています。説明もありがとう、私は今なぜこれがそうであるか理解しています。 – Mazze

関連する問題