如何包含具有相对路径的 bash 脚本?

Kir*_*Rud 5 linux bash shell

我有3个脚本:

脚本A:

echo "Hey you!"
Run Code Online (Sandbox Code Playgroud)

脚本B:

source ./A.sh
Run Code Online (Sandbox Code Playgroud)

脚本 C:

source ./libs/B.sh
Run Code Online (Sandbox Code Playgroud)

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

脚本 C 抛出错误:

./libs/B.sh: line 1: ./A.sh: 没有那个文件或目录

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

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

iBu*_*Bug 7

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

脚本B,修改版:

source "$(dirname "$0")/A.sh"
Run Code Online (Sandbox Code Playgroud)

推荐用于 C 的相同 mod:

source "$(dirname "$0")/libs/B.sh"
Run Code Online (Sandbox Code Playgroud)

您也可以使用${0##*/}相同的效果$(dirname "$0")

或者,要确保它是脚本的完整路径,请使用${BASH_SOURCE[0]}

脚本B,修改:

source "$(dirname "${BASH_SOURCE[0]}")/A.sh"
Run Code Online (Sandbox Code Playgroud)