4

注: this is not a duplicate of In bash, is there an equality of die "error msg" , この投稿の最後に示されています.

シェル関数を考える

foo () {
    echo "testing..." 1>&2
    return 1
    echo "should never reach this point" 1>&2
}

fooの予想される動作を以下に示します。

% foo || echo $?
testing...
1

関数 の最初の2行に示されているfoo機能をカプセル化しdieて、 の定義foo

foo () {
    die 1 "testing..."
    echo "should never reach this point" 1>&2
}

...元の動作を維持しながら。

私の興味は主に ですが、異なる場合は、および/またはスクリプトにzsh適した回答にも興味があります。bash/bin/sh


ところで、これはうまくいきません:

die () {
    local exit_code=$1
    shift
    echo "$*" 1>&2
    exit $exit_code
}

コマンドラインからfoothis を使用したバージョンを実行dieすると、現在のシェルが強制終了されます (少なくとも、これは、似たようなことを試したときに得られる結果です)。これが、この質問がIn bash, is there a equality of die "error msg"の複製ではない理由です。いずれにせよ、その他の質問に対する答えは、ここでの私の要件を満たしていません。

4

2 に答える 2

0

zsh 4.3.4 以降、throw/catch 構文を使用できます。古い学校の「set -e」またはエラー処理の終了よりもはるかに問題が少ないと思います。それらにアクセスするには、必ず「autoload -U throw catch」を実行してください。詳細については、「man zshcontrib」を参照してください。

于 2013-12-01T00:01:56.477 に答える