シェルスクリプトで、実行したコマンドの戻り値を知る方法は有名ですよね。
以下のように、$? で知ることができます。 ※false は つねに 1 を返すコマンドです。
# false; echo $? 1
しかし、パイプ "|" でつないだ場合、$? で知ることができるのは、最後のコマンドの結果だけです。
# true | true | false; echo $? 1
1番目や2番目の結果を知りたい場合どうすればよいかというと、PIPESTATUS とう配列をみてあげるとわかります。
例えば、上記のコマンド結果を以下のように表示してあげると、PIPESTATUS[0] には、最初のtrueの結果が、PIPESTATUS[1]には、2番目のtrueの結果が、PIPESTATUS[2]には3番目のfalseの結果がわかります。
# true | true | false; echo ${PIPESTATUS[0]} 0 # true | true | false; echo ${PIPESTATUS[1]} 0 # true | true | false; echo ${PIPESTATUS[2]} 1