どんな環境でもそうですが、何も意識せずにコードを書いていると、思わぬところで引っかかることがあります。
シェルスクリプトとexit
コマンド
プログラムを書く上で、「途中脱出」という技法はよく必要となります。そして、シェルスクリプトでそれを実現するのがexit
コマンドです。
exit 0
のように終了コードを指定すれば、それをシェルスクリプト全体の終了コードとする1、という結果になります。
終了コードを指定しないと…
では、終了コードを指定しない場合はどうなるかというと、「前のコマンドの終了コードをそのまま返す」ような挙動となります。set -e
している場合2などは典型的ですが、普通に実行していれば終了コード0のコマンドばかりが並びますので、exit
だけでも終了コード0を返す状況が多いです。
とはいえ、引っかかるパターンもありまして、[ 条件 ] || exit
のように書くと、条件が成立しない場合に[
コマンドの終了コードは1で、続くexit
がその1を返してしまいます。シェルスクリプトの終了コードを0にするには、明示的に[ 条件 ] || exit 0
と書く必要があります。
結論
-
exit
のような、一見単純に見えるコマンドでも、意外な挙動が潜んでいることがある - 正常終了させたいときに、無意識に
exit
だけ書いていると失敗することがある