3
2

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.

シェルスクリプト内のエラーが発生した場所で異常終了したい

Last updated at Posted at 2020-03-08

課題

シェルスクリプトは、途中のコマンドでエラーが発生してもその場では終了せず、なおかつシェルスクリプト自体の終了ステータスも 0 (正常終了) です。
例えば、次のシェルスクリプトは、途中の false コマンドがエラーを返しますが、最後の echo "[Finish]" が実行されており、終了ステータスも 0 (正常終了) となっています。

test1.sh
#!/bin/bash
false
echo "[Finish]"
$ ./test1.sh; echo $?
[Finish]
0

これは正しい挙動ですが、場合によっては

  • どこかでエラーが発生したら、その場で止まってほしい
  • 終了ステータスも 0 以外を返してほしい

ということもあります。


以下で解決策を挙げます。

解決策

1. shebang に -e オプションをつける

test2.sh
#!/bin/bash -e
false
echo "[Finish]"
$ ./test2.sh; echo $?
1

:information_source: 途中で異常終了 ( 期待通り )

2. set -e コマンド

test3.sh
#!/bin/bash
set -e
false
echo "[Finish]"
$ ./test3.sh; echo $?
1

:information_source: 途中で異常終了 ( 期待通り )

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?