8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

exitコマンドの終了コード

Posted at

どんな環境でもそうですが、何も意識せずにコードを書いていると、思わぬところで引っかかることがあります。

シェルスクリプトとexitコマンド

プログラムを書く上で、「途中脱出」という技法はよく必要となります。そして、シェルスクリプトでそれを実現するのがexitコマンドです。

exit 0のように終了コードを指定すれば、それをシェルスクリプト全体の終了コードとする1、という結果になります。

終了コードを指定しないと…

では、終了コードを指定しない場合はどうなるかというと、「前のコマンドの終了コードをそのまま返す」ような挙動となります。set -eしている場合2などは典型的ですが、普通に実行していれば終了コード0のコマンドばかりが並びますので、exitだけでも終了コード0を返す状況が多いです。

とはいえ、引っかかるパターンもありまして、[ 条件 ] || exitのように書くと、条件が成立しない場合に[コマンドの終了コードは1で、続くexitがその1を返してしまいます。シェルスクリプトの終了コードを0にするには、明示的に[ 条件 ] || exit 0と書く必要があります。

結論

  • exitのような、一見単純に見えるコマンドでも、意外な挙動が潜んでいることがある
  • 正常終了させたいときに、無意識にexitだけ書いていると失敗することがある

外部リンク

  1. POSIXで動作が保証されるのは0以上255以下までです。

  2. set -eをかけている途中にエラーとなると、まさしくexit(引数なし)が実行されたのと同じ結果となる、とのことです。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?