如何包含具有相对路径的 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 执行的脚本的绝对路径? [复制]