シェルスクリプトでコマンドを安全に実行したい

シェルスクリプト内で例外を処理したい。 Pythonのsubprocess.check_callメソッドみたいに、コマンド打ってエラーだったらとりあえず止まって欲しい。 とりあえず止めるだけなら以下のように関数check_callを定義しておいて、コマンドを打つ変わりにcheck_call関数を呼ぶようにする。

#!/bin/sh

function check_call() {
    $*
    ret=$?
    if [ $ret -ne 0 ]; then
        exit $ret
    fi
    return 0
}

check_call cmd1 args1
check_call cmd2 args2

2015-02-26

コマンド毎にcheck_callとつけるのはだるいし、ファイルの先頭という重要な場所に冗長なものがつくのも嫌なのだ。(話変わるけど、#includeとかimportとかを先頭につけるのあれどうにかならないの?)

以下のようにするのがいいかもしれない。xなんてコマンドは一般的にないし、記号風でシェルっぽいし、意味もわかりやすい。

#!/bin/sh

# Call a command and check the return code.
# If the command failed, exit from the script.
x() { $*; r=$?; if [ $r -ne 0 ]; then exit $r; fi;}

2015-04-11

わざわざこんなことする必要はなく、

set -e

と先頭に書けば止まるようになるそうです。

欲しい機能は組み込みで、だいたいあるものなのですね。

silverfox氏、ご指摘ありがとうございます。 賢くなりました。