【发布时间】:2016-02-26 22:47:17
【问题描述】:
我有一个来源的 Bash 脚本。获取此脚本时,它会在 Bash 脚本中运行一个函数。如果满足某个条件,此函数应终止脚本。在不终止脚本来源的 shell 的情况下如何做到这一点?
明确一点:我希望终止动作由源 shell 脚本中的函数完成,而不是在源 shell 脚本的主体中。我可以看到的问题是return 只是从函数返回到脚本的主体,而exit 1 终止了调用 shell。
以下最小示例说明了该问题:
main(){
echo "starting test of environment..."
ensure_environment
echo "environment safe -- starting other procedures..."
}
ensure_environment(){
if [ 1 == 1 ]; then
echo "environment problemm -- terminating..."
# exit 1 # <-- terminates calling shell
return # <-- returns only from function, not from sourced script
fi
}
main
【问题讨论】:
-
改为执行脚本。这样,
exit将退出它正在运行的子 shell。 -
有趣。您能否举一个小例子开始,可以改进。例如。一个终止 shell。
-
你要求的东西是不可能的。你必须重组你的代码。
-
@fedorqui 该脚本是为了设置大量环境变量而设计的,所以我认为必须 source 。
-
@LudwigSchulze 应要求,我添加了一个完整的最小脚本示例,该脚本在获取时可以说明问题。
return不会终止源脚本(仅是函数),exit 1会终止调用 shell。我需要一些介于两者之间的东西!
标签: bash return exit terminate