我试图通过 cron 将自动更新(针对多个服务器)bash 脚本设置为配置文件(基于文本),方法是每天下载新文件并直接替换它。该脚本工作正常,但是有时每个服务器都需要具有与主配置文件不同的特定设置,例如,标准配置行之一是:
port_defined=1,2,3
同时一些服务器需要:
port_defined=1,2,3,4,5,6
我可以手动更改相应服务器上的配置行,但是每次运行自动更新脚本时它都会被再次覆盖。
所以问题是,我可以制作一个 bash 脚本来下载参考配置文件,然后首先将其与本地配置文件(在相应服务器上)进行比较是否有任何差异,然后合并它?
通过“合并”,我的意思是将该行正确地组合成:
port_defined=1,2,3,4,5,6
而不是两条单独的线:
port_defined=1,2,3
port_defined=1,2,3,4,5,6
答案1
您真的要合并值列表吗?那是
port_defined=1,3,5
port_defined=2,4,123
应合并为
port_defined=1,2,3,4,5,123
如果是这样,你可以尝试
BEGIN { FS = "=" }
NR == FNR && /ports_defined/ { ports=$2 }
NR > FNR {
if ($1 == "ports_defined") {
ports = ports "," $2
split(ports, p, ",")
for (i in p) {
if (!num[p[i]]) {
result = result "," p[i]
num[p[i]] = 1
}
}
print $1 "=" substr(result, 2)
} else {
print
}
}