Linux 为目录应用bash变量(递归)

Linux 为目录应用bash变量(递归),linux,bash,shell,Linux,Bash,Shell,我有一个项目,需要我用安装/维护/任何脚本保存大量bash文件,其中大多数需要知道其他文件夹在哪里。现在,这些都是用相对路径创建的,但这让我保留了文件夹结构,从长远来看,这可能不是最好的主意 例如,我有一个文件(script.sh): 但是现在我想要2个文件,其中一个包含来自这些目录的全局变量(我们称之为conf.sh): 在script.sh上,不知何故,我会使用这些变量 我能找到的最好的方法是将conf.sh放在一个固定的位置,其他所有人都在它开始之前运行它,但我正在尝试找到更好的解决方案

我有一个项目,需要我用安装/维护/任何脚本保存大量bash文件,其中大多数需要知道其他文件夹在哪里。现在,这些都是用相对路径创建的,但这让我保留了文件夹结构,从长远来看,这可能不是最好的主意

例如,我有一个文件(
script.sh
):

但是现在我想要2个文件,其中一个包含来自这些目录的全局变量(我们称之为
conf.sh
):

script.sh
上,不知何故,我会使用这些变量

我能找到的最好的方法是将
conf.sh
放在一个固定的位置,其他所有人都在它开始之前运行它,但我正在尝试找到更好的解决方案

编辑

我忘了说这是在Git存储库中,这是一个合理的假设。话虽如此,但因为我想让它尽可能独立,所以我最终在每个需要这些变量的脚本中都使用了它:

. $(git rev-parse --show-toplevel)/my_conf_file.conf

此命令执行位于git存储库根目录中的my_conf_file.conf中的内容。它并不理想(也不完全安全),但它只需最低限度的配置就可以达到目的。

一个常见的习惯用法是在多个目录中的一个(或多个)目录中包含一个配置文件,并让脚本按顺序检查每个目录。例如,您可以搜索:

/etc/script.cfg     # global
~/.script.cfg       # user-specific, hidden with leading dot
您还可以搜索环境作为最后手段。这种搜索策略很容易在bash中实现。你所要做的就是:

[[ -e /etc/script.cfg ]] && . /etc/script.cfg
[[ -e ~/script.cfg    ]] && . ~/script.cfg

echo "THINGS_DIR=$THINGS_DIR"
echo "OTHERS_DIR=$OTHERS_DIR"
如果两个配置文件存在,它会将它们作为源文件。如果用户副本存在,它将覆盖全局设置。如果两者都不存在,脚本自然会使用任何环境变量。这样,用户可以覆盖配置设置,如下所示:

THINGS_DIR=/overridden/things/dir script.sh
[[ -e /etc/script.cfg ]] && . /etc/script.cfg
[[ -e ~/script.cfg    ]] && . ~/script.cfg

echo "THINGS_DIR=$THINGS_DIR"
echo "OTHERS_DIR=$OTHERS_DIR"
THINGS_DIR=/overridden/things/dir script.sh