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

时间:2014-04-09 12:29:54

标签: bash

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

. ~/bin/fns

由于我的~/bin路径在PATH上,有没有办法阻止用户从命令行执行fns(通过从脚本返回消息),但允许其他脚本包含这个文件?

(Bash> = 4)

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