$(...|...) コマンドの PIPESTATUS

$(...|...) コマンドの PIPESTATUS

現在のシェルに変数が設定されている場合、コマンドを読み取るには${PIPESTATUS[0]?どういうわけかこれを現在のシェルに渡す方法はありますか?

変数を設定していますが、メール属性が実際にLDAPに存在しないと判断する前に変数が失敗しないことを確認したいとMAIL=$(ldapsearch.... | find_for_mail)思います。ldapsearch

$ true | false
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
0 1
$ Z=$(true | false)
$ echo ${PIPESTATUS[0]}
1                        <--- why 1?
$ echo ${PIPESTATUS[1]}

$ Z=$(true | false;echo ${PIPESTATUS[0]} ${PIPESTATUS[1]})
$ echo $Z
0 1
$ Z=$(true | false;C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C

$ Z=$(true | false;export C="${PIPESTATUS[0]} ${PIPESTATUS[1]}")
$ echo $C

ベストアンサー1

問題は、export変数を親プロセスから子プロセスに環境変数にエクスポートすることです。終了コードの1つだけに興味がある場合は、次のコードを使用できます。

$ Z=$(false | true; exit ${PIPESTATUS[0]})
$ echo $?
1

おすすめ記事