我的文件系统中到处都是一个脚本(构建过程的副作用),它设置了一些全局环境变量(LD_LIBRARY_PATH、PATH、ROOTDIR 等),这些变量需要在我的 shell 中才能正常运行。当然,这意味着我需要source script.sh
或. script.sh
才能使其工作,而不是./script.sh
(这将生成一个新的 shell 并且不会在我当前的 shell 中设置变量)。
我可以在脚本中添加什么内容吗防止(或警告)有人跑步./script.sh
?
答案1
在 shell 脚本中,$0
是当前正在运行的脚本的名称。您可以使用它来判断您正在被调用还是运行,如下所示:
if [[ "$(basename -- "$0")" == "script.sh" ]]; then
>&2 echo "Don't run $0, source it"
exit 1
fi
答案2
最简单的方法bash
是:
if [ "$0" = "$BASH_SOURCE" ]; then
echo "Error: Script must be sourced"
exit 1
fi
$BASH_SOURCE
始终包含脚本的名称/路径。
$0
仅在没有来源时包含脚本的名称/路径。
因此,当它们匹配时,就意味着该脚本没有来源。
答案3
这已经讨论过了在 SO。 这@barroyo 获得最多点赞的回答说使用
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && echo "script ${BASH_SOURCE[0]} is being sourced ..."
答案4
除了支票 0 美元(米克尔例如,将扩展名从 .sh 更改为 .src 可能会很有用。这将有助于了解不应执行此脚本的任何人。