关于Linux:如何使用相对路径包含bash脚本?

How to include bash scripts with relative path?

本问题已经有最佳答案,请猛点这里访问。

我有3个脚本:

脚本A:

1
echo"Hey you!"

脚本B:

1
source ./A.sh

脚本C:

1
source ./libs/B.sh

所以脚本A和B在文件夹"libs"中,脚本C使用这个目录中的脚本B。

脚本C引发错误:

./libs/B.sh: line 1: ./A.sh: No such file or directory

在这种情况下,如何更正使用脚本"including"?

我理解为什么会发生这个错误,但我不理解如何修复它。也!我不想包括完整路径as/home/…/libs/a.sh等。我想创建无需永久编辑的移动自由脚本。


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

脚本B,修改版本:

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

建议C使用相同的型号:

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

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

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

脚本B,修改:

1
source"$(dirname"${BASH_SOURCE[0]}")/A.sh"