我的bash脚本使用了很多检查,例如:
if [ something bad ] ; then
echo "error message"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
我发现,如果用户通过执行它source my-script.sh,而不是./my-script.sh,这exit 1 将关闭用户的shell!
并且用户看不到任何错误消息!
我如何知道脚本是source-d,如何退出(使用非零状态代码)source-d脚本?一般来说,我该怎么办呢?
Eri*_*ouf 10
似乎这可能有两个部分。第一个是知道您何时在sourced 脚本中执行而不是在已执行的脚本中执行。这可以在这个答案中找到,对于 bash 他们建议:
[[ "$0" != "$BASH_SOURCE" ]] && sourced=1 || sourced=0
Run Code Online (Sandbox Code Playgroud)
判断您是否被采购。
如果您正在采购,则需要使用return而不是exit.
您可以将该函数存储在一个变量中,例如
if [[ $sourced -eq 1 ]]; then
ret=return
else
ret=exit
fi
Run Code Online (Sandbox Code Playgroud)
然后当你想使用合适的,你就用
$ret 1
Run Code Online (Sandbox Code Playgroud)