パイプを繋げたときの返り値は最後のコマンドの返り値になる。 例えば stat = system "a | b |c" としたとき、途中でaやbがエラーになっても返り値statはfalseにならずcの返り値であるtrueになる。 cがエラーに成った時にはfalseになる。*1 これだとパイプの途中でエラーが起きた場合に捕捉できない。 そういうときはbashの-o pipefailオプションを使う。*2 これを指定するとパイプの途中でエラーが起こった時にはそのときの返り値が、なにも起きなければ最後のcの返り値が全体の返り値が返ってくるようになる。 さらに-eを付けておくことでエラーが起きたタイミングで終了するようになる。 stat = system %{bash -e -o pipefail -c "a | b | c"} 参考 Get exit status of process that'

