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

Posted

技术标签:

【中文标题】如何包含具有相对路径的 bash 脚本? [复制]【英文标题】:How to include bash scripts with relative path? [duplicate] 【发布时间】:2018-06-18 10:08:51 【问题描述】:

我有 3 个脚本:

脚本 A:

echo "Hey you!"

脚本 B:

source ./A.sh

脚本 C:

source ./libs/B.sh

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

脚本 C 抛出错误:

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

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

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

【问题讨论】:

从开头删除./. <scriptname>source <scriptname> 是一回事。正如您提到的脚本 A 和 B 在 libs 目录中,我假设脚本 C 也在同一目录中,如果所有三个脚本都位于同一目录中,则不需要使用 ./ 【参考方案1】:

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

脚本 B,修改版:

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

为 C 推荐相同的 mod:

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

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

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

脚本 B,修改:

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

【讨论】:

谢谢!还有这个: > source "$(dirname "$0")/libs/B.sh" 不起作用。但是这个: > source "$(dirname "$BASH_SOURCE[0]")/A.sh" 工作正确。

以上是关于如何包含具有相对路径的 bash 脚本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]

Shell脚本——获取脚本所在的绝对路径

Shell脚本——获取脚本所在的绝对路径

如何将文件路径作为 bash 脚本中的参数传递给函数? [复制]

shell脚本常用命令汇总

Bash:从作为输入给出的相对路径中获取绝对路径