我有一个包含常用功能的脚本,包含在我的其他脚本中:
. ~/bin/fns
由于我的~/bin
路径在PATH上,有没有办法阻止用户从命令行执行fns
(通过从脚本返回消息),但允许其他脚本包含这个文件?
(Bash> = 4)
答案 0 :(得分:5)
只需使用chmod -x . ~/bin/fns
删除可执行位。它仍然可以在采购时使用,但您不能再按其名称(意外地)调用它。
答案 1 :(得分:0)
我工作场所的一些剧本使用特殊的shebang
#!/bin/echo Run:.
返回
Run:. <pathname>
当你将它用作命令时。
答案 2 :(得分:0)
在您希望仅允许来源的脚本开头添加以下内容:
if [ ${0##*/} == ${BASH_SOURCE[0]##*/} ]; then
echo "WARNING"
echo "This script is not meant to be executed directly!"
echo "Use this script only by sourcing it."
echo
exit 1
fi
这将检查当前脚本和执行的shell脚本文件基本名称是否匹配。如果它们匹配,那么显然你是直接执行它,所以我们打印一条消息并以状态1退出。
答案 3 :(得分:0)
if (return 0 2>/dev/null) ; then
:
else
echo "Error: script was executed."
exit 1
fi