シェルスクリプトでパイプを使った時の戻り値のとり方
はい、おつカレー様です。
bashを使ったシェルスクリプトでパイプを使っても戻り値をちゃんと取りたいときの話です。
シェルスクリプトの戻り値
シェルスクリプトでの戻り値取るときに $? を使うことがあると思います。
$ ls / # こっちは正常 $ echo $? 0 $ ls /notfounddir # こっちはエラー $ echo $? 1
コマンドのログを取りたいなと思ってteeとかつなげちゃうとteeの戻り値になっちゃって取れないですよね。
$ ls /notfounddir | tee test ls: /notfounddir: No such file or directory $ echo $? 0 # <-アレ?
${PIPESTATUS[@]}
こういう場合は、${PIPESTATUS[@]}を使うことで取ることができます。
$ ls / | tee test.log $ echo ${PIPESTATUS[@]} 0 0 $ ls /notfounddir | tee test.log ls: /notfounddir: No such file or directory $ echo ${PIPESTATUS[@]} 1 0 $ echo ${PIPESTATUS[0]} 1
というわけです、便利ですねー。
こういう場合は良くあって、最初気づかなくて後で困ることも良くあるので、使ってみてくださいね(╹◡╹)
補足
他にも内部変数は幾つかあるので、このへんを見ると役に立つものがあるかも
http://tldp.org/LDP/abs/html/internalvariables.html
[改訂新版] シェルスクリプト基本リファレンス ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 119回
- この商品を含むブログ (10件) を見る