bash:退出source-d脚本

184*_*615 5 bash

我的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)


arn*_*ntg 7

定义:

[[ "$0" == "$BASH_SOURCE" ]] && ret=exit || ret=return

使用:

$ret 1