BLOGTIMES
2012/03/28

コマンドがエラーになった場合にシェルスクリプトを即時に終了させる

  sh  programming 
このエントリーをはてなブックマークに追加

シェルスクリプトでバッチを組むときに、コマンドがエラーしたら即座に終了させたいということはよくあると思います。これまでは $? を自分で見て終了させる処理を書いていたのですが、 set -e を使うとそれを自動的にやってくれることが分かったのでメモ。ちゃんと man にも書いてありましたね。

man 1 bash

-e Exit immediately if a simple command (see SHELL GRAMMAR above) exits with a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test in an if statement, part of a && or || list, or if the com- mand's return value is being inverted via !. A trap on ERR, if set, is executed before the shell exits.

例えばこんなスクリプトを書いてみます。

example.sh

#!/bin/bash set -e trap 'echo "trap exit"' EXIT trap 'echo "trap err"' ERR echo "foo" false echo "bar" # ここは実行されない

これを実行するとこんな感じになります。

$ ./example.sh foo trap err trap exit

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4857
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン