如何识别 shell 脚本执行与点执行

如何识别 shell 脚本执行与点执行

我正在编写一个 bash 脚本,它需要在当前进程上运行才能发挥作用。

也就是说,我想确保脚本是通过source script.sh. ./script.sh和调用的不是 ./script.sh

对于那些不知道区别的人,请参考以下内容: 执行 Bash 脚本与获取该脚本有什么区别?

我知道我可以chmod u-x script.sh这样做,所以没有来源就无法执行,但用户可能会将其识别为脚本并chmod自己识别。如果存在,我希望有一个更优雅的解决方案。

有没有办法让脚本识别出它尚未被调用source.并因错误退出?

答案1

如果您的脚本由 提供bash,那么$0bash-bash

[[ $0 =~ ^-?bash$ ]] && echo "Thank you for sourcing me"

或者,如果你知道你的脚本被调用了script.sh,但是你不关心它可能来自哪个 shell,那么就反转测试:

[ "X$(basename -- "$0")" != "Xscript.sh" ] && echo "Thank you for sourcing me"

(请注意,由于以上内容适用于通用(POSIX)shell,因此它不使用[[测试。)

有关相关问题的更多讨论,请参阅堆栈溢出

相关内容