端末でbashを使用するときは、通常ソーススクリプトを実行する必要があります。この場合、デフォルトのシェルが終了しないようにするには、「exit」ではなく「return」を介してスクリプトを終了する必要があります。
通常のユーザーとして、「exit」の代わりに「return」を適用するために-eオプションを何らかの方法で実行できます。
挨拶
アントン・ベッセル
答え1
はい、errexit
シェルオプションを設定すると、set -e
コマンドがゼロ以外の終了状態で終了した場合(コマンドがAND / ORリストなどの一部ではない場合)、現在のシェルはすぐに終了します。
つまり、「外部」の最初のエラーが発生した場合は、ソーススクリプトの実行を停止させることはできませんset -e
。
ただし、bash
シェルで発生するもう1つのことは(set -e
トリガーが必要な場合)、すべてのERR
トラップが実行されることです。これにより、トラップを設定して実行することができますreturn
。
$ cat script
echo hello
false
echo bye
$ . ./script
hello
bye
私たちは上記のスクリプトが実行されたときに実行を停止したいと思いますfalse
。のトラップを設定してこれを行いますERR
。トラップは、使用する前に最初に自分で設定を解除しますreturn
。トラップが独自に設定解除されていない場合は、return
関数やソーススクリプトの内側になく実行を試みるというシェルから苦情を受けます。これは、ソーススクリプトのゼロ以外の戻り状態のためにトラップが2番目にアクティブになるためです。
$ trap 'trap - ERR;return' ERR
$ . ./script
hello
$ echo "$?"
1
スクリプトを受け取るたびにトラップを設定する必要があることに注意してください。