有些情况下您希望从函数内部终止脚本:
function die_if_fatal(){
....
[ fatal ] && <termination statement>
}
如果脚本是来源的,$。脚本
,终止语句为:
return
,正如预期的那样,将从die 返回,但不会完成脚本exit
终止 session (不返回脚本)。
现在,如果脚本被执行:chmod +x script; ./脚本
:
return
,正如预期的那样,将从die 返回,但不会完成脚本exit
不会返回到die
并终止脚本。
简单的方法是使用返回代码并在返回时检查它们,但是,我需要停止父进程,而不修改调用程序脚本。
有其他方法可以解决这个问题,但是,假设您在第 5 层进入一个复杂的脚本,并且您发现该脚本必须结束;也许是一个“神奇”的退出代码?我只想要源代码上的执行行为。
我正在寻找一个简单的语句来结束正在运行的源脚本。
采购时,从函数内部完成脚本的正确方法是什么?
最佳答案
假设您的脚本不会来自循环内部,您可以将脚本的主体包含在人工运行一次的循环中,并使用 break
命令中断脚本。
将这个想法形式化并提供一些支持实用程序,您的脚本必须具有以下结构:
#!/bin/bash
my_exit_code=''
bailout() {
my_exit_code=${1:-0}
# hopefully there will be less than 10000 enclosing loops
break 10000
}
set_exit_code() {
local s=$?
if [[ -z $my_exit_code ]]
then
return $s
fi
return $my_exit_code
}
###### functions #######
# Define your functions here.
#
# Finish the script from inside a function by calling 'bailout [exit_code]'
#### end functions #####
for dummy in once;
do
# main body of the script
#
# finish the script by calling 'bailout [exit_code]'
done
set_exit_code
关于linux - bash 从函数内部退出脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399461/