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

Shell script - knowing the path of an include, then include another file

我想要什么?

我要处理很多脚本,所以我尝试将重复性任务放在不同的文件和脚本中,我将按需包含这些任务。

详情

NO bash,只是 POSIX shell,解释器将是 /bin/sh,脚本将是来自任何地方的 运行,而不仅仅是来自他自己的文件夹,包含也可以在任何地方,但可以是相对的。

文件结构:

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

文件内容:

main.sh:

THIS_FILE=$(readlink -f "[=12=]");
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.

有什么想法吗?这在技术上是可行的吗?

提前致谢!

好吧,稍微想了想,我觉得我一开始想的办法解决不了,所以我从另一个角度来解决这个问题:在每个系统中定义一个脚本'全局根路径变量。

所以我像这样导出一个全局变量:

export SCRIPT_ROOT=path/to/root/scripts

可以在不同的地方定义如profile.d.

然后在 incl1 中,我将像这样放置导入行:

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

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

我希望这对其他人有帮助。