我在Bash函数中使用了"exit 1"语句来终止整个脚本,并且它运行良好:
function func()
{
echo "Goodbye"
exit 1
}
echo "Function call will abort"
func
echo "This will never be printed"
但后来我意识到,当这样调用时它不会起作用:
res=$(func)
我知道我创建了一个子Shell,“exit 1”会中止子Shell而不是主Shell;有没有办法编写一个函数,无论如何调用它都可以中止整个执行过程?
我只需要获取真实的返回值(由函数输出)。
setsid()
函数,但它的工作方式并不完全相同。更新后不使用setsid
命令,因为这将要求我们启动一个新进程。 - FatalErrortempfile
这样的命令来选择一个存储代码的位置,然后让正在退出的shell将代码写入该文件,最后只需读取父处理程序即可。 - FatalErrorset -E
的Bash备选解决方案:http://unix.stackexchange.com/questions/48533/exit-shell-script-from-a-subshell - Ron BurkTERM
可行... 为什么SIGTERM
更好呢? - Jonathan Cross