如果我的脚本来源
. ./my_script.sh
source ./my_script.sh
Run Code Online (Sandbox Code Playgroud)
然后停止在脚本中执行,我会用return.
如果我的脚本是直接执行的
./my_script.sh
bash ./my_script.sh
Run Code Online (Sandbox Code Playgroud)
然后我插入一个exit.
如果我不知道用户是将采购它还是直接执行它,我怎么能干净地停止脚本而不杀死它所调用的终端?
优选地,代码片段应该能够终止脚本,即使它被放置在脚本的一个函数内.
请尝试以下方法:
ec=0 # determine the desired exit code
return $ec 2>/dev/null || exit $ec
Run Code Online (Sandbox Code Playgroud)
return如果脚本正在采购会成功,否则exit会一命呜呼的2>/dev/null抑制情况下,脚本错误消息没有来源.
最终效果是脚本将以所需的退出/返回代码终止,无论它是否来源.
更新:OP希望能够从脚本中的函数内部退出脚本.
我能想到的唯一方法是将所有脚本的代码放在子shell中,并exit从子shell中的函数内部调用; 然后将return 2>/dev/null || exit命令后子shell(如子shell之外唯一语句):
#!/usr/bin/env bash
( # subshell to place all code in
foo() {
exit 1 # exit the subshell
}
foo # invoke the function
)
# Terminate script with exit code from subshell.
ec=$?; return $ec 2>/dev/null || exit $ec
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |