我的bash脚本使用了很多检查,如:
if [ something bad ] ; then
echo "error message"
exit 1
fi
我发现,如果用户通过source my-script.sh
而不是./my-script.sh
执行此操作,则此exit 1
会关闭用户的shell!
并且用户看不到任何错误消息!
我如何知道脚本是source-d,以及如何退出(使用非零状态代码)source-d脚本?一般来说,我该怎么办呢?
答案 0 :(得分:3)
似乎可能有2个部分。第一个是知道你何时在source
d脚本而不是执行脚本中执行。这可以在this回答中找到,对于bash,他们建议:
[[ "$0" != "$BASH_SOURCE" ]] && sourced=1 || sourced=0
告诉你是否有人来源。
如果您的来源,您希望使用return
代替exit
。
您可以将该函数存储在类似
的变量中if [[ $sourced -eq 1 ]]; then
ret=return
else
ret=exit
fi
然后当你想使用适当的那个时,你只需要使用
$ret 1
答案 1 :(得分:1)
对于那些喜欢if
的人:
# find out how the script was invoked
# we don't want to end the user's terminal session!
if [[ "$0" != "$BASH_SOURCE" ]] ; then
# this script is executed via `source`!
# An `exit` will close the user's console!
EXIT=return
else
# this script is not `source`-d, it's safe to exit via `exit`
EXIT=exit
fi
然后
$EXIT 1
答案 2 :(得分:0)
定义:
[[ "$0" == "$BASH_SOURCE" ]] && ret=exit || ret=return
使用:
$ret 1