以下の内容はhttps://ikm.hatenablog.jp/entry/2015/12/08/222009より取得しました。


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"}

参考

*1:具体的な返り値は個々のコマンドの実装依存なので、エラーになってもtrueを返すやつがいるかもしれない

*2:bash 3.0から。zshも5.0以降で実装されてるらしい




以上の内容はhttps://ikm.hatenablog.jp/entry/2015/12/08/222009より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14