pipeの途中でエラーが起きたタイミングでエラーを返す
パイプを繋げたときの返り値は最後のコマンドの返り値になる。
例えば
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"}