我有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 等。我想创建无需永久编辑的免移动脚本。
您可以指定脚本本身的目录。默认情况下,单个点表示“当前工作目录”。
脚本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)