スクリプトを書いていたところ、奇妙な問題に遭遇しました。文字列を出力して終了するエラー関数を呼び出す可能性のある一連の関数を含むスクリプトをソースすると、シェルが終了します。私はそれがなぜそれをするのか知っています。これは、関数呼び出しが呼び出し元と同じプロセス空間にある (少なくとも bash にある) ためです。したがって、関数内の終了は、提供された終了コードで現在のプロセスを終了します。例:
error()
{
echo $1
exit 1
}
fn()
{
if [ $# == 0 ]; then
error "Insufficient parameters."
fi
# do stuff
}
$ fn
Insufficient parameters.
[shell terminates]
私の質問は、現在のシェルを終了したり、新しいサブシェルを生成したりせずに、関数スタック内のすべての関数を終了できますか?
ありがとう