Bash:检测脚本中的执行与源代码?

Yer*_*aze 21 bash

我有一个脚本散落在我的文件系统周围(构建过程的副作用),它设置了一些需要在我的 shell 中正确操作的全局环境变量(LD_LIBRARY_PATH、PATH、ROOTDIR 等)。当然,这意味着我需要source script.sh. script.sh让它工作,而不是./script.sh(这会产生一个新的 shell,而不是在我当前的 shell 中设置变量)。

有什么我可以添加到脚本中来防止(或警告)有人运行的./script.sh吗?

Mik*_*kel 16

在 shell 脚本中,$0是当前运行脚本的名称。您可以使用它来判断您是被采购还是像这样运行:

if [[ "$(basename -- "$0")" == "script.sh" ]]; then
    echo "Don't run $0, source it" >&2
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)


wis*_*cky 11

最简单的方法bash是:

if [ "$0" = "$BASH_SOURCE" ]; then
    echo "Error: Script must be sourced"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

$BASH_SOURCE 始终包含脚本的名称/路径。

$0 仅在未获取时包含脚本的名称/路径。

所以当它们匹配时,这意味着脚本不是来源。