如何防止直接bash脚本执行并只允许其他脚本使用?

如何防止直接bash脚本执行并只允许其他脚本使用?,bash,Bash,我有一个脚本具有通用功能,该脚本包含在我的其他脚本中: . ~/bin/fns 由于我的~/bin路径位于路径上,是否有办法防止用户从命令行执行fns(通过从脚本返回消息),但允许其他脚本包含此文件 (Bash>=4)只需使用chmod-x删除可执行位~/bin/fns。它在来源时仍然可以工作,但你不能再(意外地)用它的名字来称呼它。我工作场所的一些脚本使用了特殊的shebang #!/bin/echo Run:. 返回 Run:. <pathname> Run:。 当您将其

我有一个脚本具有通用功能,该脚本包含在我的其他脚本中:

. ~/bin/fns
由于我的
~/bin
路径位于路径上,是否有办法防止用户从命令行执行
fns
(通过从脚本返回消息),但允许其他脚本包含此文件


(Bash>=4)

只需使用chmod-x删除可执行位~/bin/fns。它在来源时仍然可以工作,但你不能再(意外地)用它的名字来称呼它。

我工作场所的一些脚本使用了特殊的shebang

#!/bin/echo Run:.
返回

Run:. <pathname>
Run:。

当您将其用作命令时。

在脚本开头添加以下内容,您只希望获得源代码:

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退出。

让我哑口无言,有时我看不到明显的:)Axel给出了一个很好的解决方案。但另一个问题仍然存在:如果它不应该是可执行的,那么首先为什么要将它放在路径中?只是为了方便。所有可执行脚本都在同一个文件夹中,因此一个/两个不可执行文件不会有什么不同。@AndreasBombe
源代码
内置也使用了
路径
。如果你有一个例子,我很想看看这个特殊情况会如何运作……我在七年后才看到这个,我真的很喜欢这个想法。这太酷了!