我在写一个脚本时遇到了一个奇怪的问题。如果我引用了一个包含许多可能调用错误函数并输出字符串后退出的函数的脚本,它会退出我的shell。我知道为什么会这样。因为函数调用与调用者在同一进程空间中(至少在bash中是这样),所以函数内的退出将使用提供的退出码终止当前进程。例如:
error()
{
echo $1
exit 1
}
fn()
{
if [ $# == 0 ]; then
error "Insufficient parameters."
fi
# do stuff
}
$ fn
Insufficient parameters.
[shell terminates]
我的问题是,我能否在不终止当前 shell 和不创建新的子 shell 的情况下退出函数堆栈中的所有函数吗?
谢谢
return
语句,那么你没有正确理解问题,因为没有简单的方法可以在一个被多个函数调用的函数中使用它,使它能够跳回到基本shell,除非必须询问每个函数调用的返回值,在某些情况下这是不切实际或不可能的。在这种情况下,执行kill -INT $$
比使用return
要优雅得多。 - Adrian$$
的值是shell进程的pid。 - Adrianexit /b
- 仅退出脚本,而不退出shell(窗口)。 - will