Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2811

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

$
0
0

課題

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

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

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

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

ということもあります。


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

解決策

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

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

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

2. set -e コマンド

test3.sh
#!/bin/bashset-efalse
echo"[Finish]"
$ ./test3.sh; echo $?
1

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


Viewing all articles
Browse latest Browse all 2811

Trending Articles