gpt4 book ai didi

linux - 如何在我的应用程序的目录树中使源位置独立?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:02 24 4
gpt4 key购买 nike

我有一棵这样的树:

repo
|-- dir
| |-- main_script.sh
| |-- subdir
| | |-- scritp1.sh
| | |-- script2.sh

我想在 script1.sh 中获取 script2.sh,在 main_script.sh 中获取 script1.sh,然后从 repo 调用 main_script:

$ pwd
.../repo
$ bash ./dir/main_script.sh

问题在于使用以下脚本:

main_script.sh:

#!/usr/bin/env bash
source ./subdir/script1.sh

脚本1.sh:

#!/usr/bin/env bash
source script2.sh

脚本2.sh:

#!/usr/bin/env bash
echo "Something useful"

我收到错误 ./dir/main_script.sh: line 2: ./subdir/script1.sh: No such file or directory。似乎 bash 正在寻找与 main_script.sh 无关但与工作目录相关的子目录。我可以使用接受的答案表单更改第一个脚本以获取脚本的位置 this questionthis blog post使 main_script.sh 看起来像这样:

#!/usr/bin/env bash
MYDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${MYDIR}/subdir/script1.sh"

但是我在 script1.sh 中获取 script2.sh 时出错:

...repo/dir/subdir/script1.sh:第 2 行:script2.sh:没有那个文件或目录

似乎 bash 正在工作目录中寻找 script2.sh。

我不想在每个脚本中嵌入目录结构。那么问题来了,如何正确导入bash中的相关脚本呢?

最佳答案

source 命令支持 PATH。因此,您只能在一个地方编辑它,新的 PATH 将被所有其他地方继承:

mydir=${BASH_SOURCE#/*}            # the normalization being done previously was needless
# (and all-caps names are reserved for variables with
# meaning to the shell or operating system).

PATH="$mydir:$mydir/subdir:$PATH" # no export needed for a variable already in environment

source script1.sh # use non-qualified path

关于linux - 如何在我的应用程序的目录树中使源位置独立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com