如何包含具有相对路径的bash脚本? [重复]

问题描述 投票:0回答:1

我有3个脚本:

脚本A:

echo "Hey you!"

脚本B:

source ./A.sh

脚本C:

source ./libs/B.sh

因此文件夹“libs”中的脚本 A 和 B 以及脚本 C 使用此目录中的脚本 B。

C 脚本抛出错误:

./libs/B.sh:第 1 行:./A.sh:没有这样的文件或目录

在这种情况下如何正确使用脚本“包括”?

我明白为什么会出现这个错误,但我不明白如何修复它。 还!我不想包含完整路径如 /home/.../libs/A.sh 等。 我想创建无需永久编辑的免移动脚本。

linux bash shell
1个回答
21
投票

您可以指定脚本本身的目录。默认情况下,单个点表示“当前工作目录”。

脚本B,修改版本:

source "$(dirname "$0")/A.sh"

C 推荐使用相同的模组:

source "$(dirname "$0")/libs/B.sh"

您也可以使用

${0%/*}
获得与
$(dirname "$0")

相同的效果

或者,要确保它是脚本的完整路径,请使用

${BASH_SOURCE[0]}
:

脚本B,修改:

source "$(dirname "${BASH_SOURCE[0]}")/A.sh"
© www.soinside.com 2019 - 2024. All rights reserved.