如何停止bash脚本的执行,无论它是否';s用“引用”;资料来源;?
我正试图摆脱bash脚本中的退出调用,以使其可供源代码使用 此时,脚本包含一个如何停止bash脚本的执行,无论它是否';s用“引用”;资料来源;?,bash,Bash,我正试图摆脱bash脚本中的退出调用,以使其可供源代码使用 此时,脚本包含一个退出,如果您正常调用脚本,该退出是正常的,但是如果您将其源代码化,它也将停止执行不需要的调用脚本 如果我用一个return替换exit,它在源代码时工作良好,但在未源代码时会失败并出错 return: can only `return' from a function or sourced script 我正在寻找一种解决这两种情况的方法。尝试返回,如果失败,返回到退出 { retval=$?; return "$r
退出
,如果您正常调用脚本,该退出是正常的,但是如果您将其源代码化,它也将停止执行不需要的调用脚本
如果我用一个return
替换exit
,它在源代码时工作良好,但在未源代码时会失败并出错
return: can only `return' from a function or sourced script
我正在寻找一种解决这两种情况的方法。尝试
返回
,如果失败,返回到退出
{ retval=$?; return "$retval" 2>/dev/null || exit "$retval"; }
测试如下:
cat >one <<'EOF'
#!/usr/bin/env bash
echo "one starting"
source two
echo "one ending"
EOF
cat >two <<'EOF'
#!/usr/bin/env bash
echo "two starting"
echo "two attempting to exit"
{ retval=$?; return "$retval" 2>/dev/null || exit "$retval"; }
echo "two still running after attempted exit
EOF
source one
…而运行chmod+x2/两个
发射:
两次启动
两人试图退出
您可以将脚本的代码包装到一个函数中,然后从该函数返回
__main() {
unset -f __main
...
if whatever; then
return
fi
...
}
__main "$@"
相关:虽然这段代码很有意义,但在寻找函数源时,它似乎不起作用,结果是完全退出。我无法重现这种失败:如果我将它放在名为
test exit
的文件中并运行bash-c'echo one。试验出口;echo two'
,输出中同时存在one
和two
。@sorin,…请参阅显示我使用的测试过程的附加说明。你会得到不同的结果吗?如果是,bash的哪个版本?Clear solution;另一种方法是相反的:只执行相关机构“如果不是什么”;它不需要包装器函数,但由于其他原因,它可能更复杂。