如何通过脚本运行多个配置文件?

如何通过脚本运行多个配置文件?

我编写了一个 bash 脚本,它从配置文件中获取变量。我从命令行传递它们,如下所示:

./my_script.sh ./config1.conf

随着我继续制作更多需要运行的配置,我现在必须运行很多命令来完成所有配置。我想知道是否有一种方法可以让脚本像 rsyslog 那样通过将它们编号为 01-first_config.conf、10-config_ten.conf、20-config_twenty.conf 等来运行所有配置。我尝试了以下方法但它只运行第一个文件:

./my_script.sh ./*.conf

我也可以将所有变量放在一个具有单独部分的文件中,但我不确定如何做到这一点,因为每个部分本质上都有脚本所需的所有变量的完整列表。不知道在上一部分完成后如何通过脚本传递每个部分。

答案1

您必须决定是否希望在rsyslog脚本内部(例如)或外部进行此处理。如果你想

./my_script.sh ./*.conf

要工作,您必须调整脚本以使其接受多个参数。就像是

for config_file; do
    . "$config_file"
done

或者您硬编码或以某种方式传递包含这些文件的目录:

for config_file in /path/to/configs/*.conf; do
    . "$config_file"
done

答案2

当你这样做时应该发生的事情./my_script.sh ./*.conf是 glob 扩展为./my_script.sh ./a.conf ./b.conf ./etc...conf.

如果您想要./my_script.sh为 glob 的每个文件启动,则以下内容可以适合您的情况:

$ ls -1 ./*.conf | while read CONF; do ./my_script.sh "$CONF"; done

说明:ls -1用于扩展glob,每行1个文件。while read CONF为每一行启动一个循环。


作为替代方案,您可以./my_script.sh ./*.conf在脚本中使用 and ,$*它将包含展开的 glob,或者$1, $2, $3, ... ,它们对应于各个位置参数,以空格分隔。

相关内容