bash:退出source-d脚本

时间:2018-04-16 12:25:41

标签: bash

我的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脚本?一般来说,我该怎么办呢?

3 个答案:

答案 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