Shell脚本-知道包含的路径,然后包含另一个文件

时间:2018-12-23 02:58:05

标签: shell sh posix

我想要什么?

我正在处理许多脚本,因此,我尝试将重复的任务放在不同的文件和脚本中,这些文件和脚本将按需包括在内。

详细信息

没有bash,只有POSIX shell,解释器将是/ bin / sh,脚本可以在任何地方运行,不仅可以在他自己的文件夹中运行,还可以在任何位置运行,但是可以是相对的。

文件结构:

.
-- folder1
|   \ main.sh
-- folder2
|   \ incl1.sh
-- folder3
    \ incl2.sh

文件内容:

main.sh:

THIS_FILE=$(readlink -f "${0}");
BASEDIR=$(dirname "${THIS_FILE}");
. "${BASEDIR}/incl1/incl1.sh";

incl1.sh:

. pathThatIDontKnow/incl2.sh

incl2.sh,内容无关,只需要包含在incl1.sh中即可

更多详细信息:

问题出在incl1中,我无法在不知道当前路径的情况下包含incl2,并且不可能在main.sh上包含incl2。

请注意,可以是一个新文件main2.sh,它尝试以相同的方式包含相同的文件,该包含文件不是main.sh的专有文件,也不必与main.sh放在同一文件夹中。 / p>

有什么想法吗?从技术上讲这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,在我认为这一点后,我无法以我最初的方式解决此问题,因此我从另一个角度来解决这个问题:在每个系统中定义脚本的根路径变量为全局变量。

所以我导出这样的全局变量:

export SCRIPT_ROOT=path/to/root/scripts

它可以在不同的地方定义,例如配置文件。

然后在incl1中,我将这样输入行:

. "$SCRIPT_ROOT/folder3/incl2.sh";

$ SCRIPTS_ROOT可以在任何地方使用。

希望这对其他人有帮助。