如何检测脚本是否来源

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我有一个脚本,exit如果它是源代码,我不希望它调用。最初我通过检查,$0 == bash但是如果脚本来自另一个脚本,或者如果用户从它来源,则会出现问题ksh。有没有一种可靠的方法来检测脚本是否被找到?

提问于
用户回答回答于

这在Bash和Korn之间似乎是可移植的:

[[ $_ != $0 ]] && echo "Script is being sourced" || echo "Script is a subshell"

类似于这个的行或像`pathname =“$ _”这样的赋值(带有后续的测试和操作)必须位于脚本的第一行或shebang后面的行(如果使用的话,应该是ksh以便在大多数情况下工作)。

用户回答回答于

如果您的Bash版本知道BASH_SOURCE数组变量,请尝试如下所示:

# man bash | less -p BASH_SOURCE
#[[ ${BASH_VERSINFO[0]} -le 2 ]] && echo 'No BASH_SOURCE array variable' && exit 1

[[ "${BASH_SOURCE[0]}" != "${0}" ]] && echo "script ${BASH_SOURCE[0]} is being sourced ..."

扫码关注云+社区