我编写了一个 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
, ... ,它们对应于各个位置参数,以空格分隔。