Intereting Posts
Мониторинг использования полосы пропускания от разных виртуальных хостов Относительные символические ссылки не разрешаются в подкаталоге Какова информация, присутствующая в дампе ядра ядра Мой скрипт сообщается как выполняющийся в журнале CRON, но он не указан в crontab любого пользователя Как подключиться к Wi-Fi на Qubes OS? Создание загрузочного USB-накопителя с установщиком NetBSD в Linux Ускорение работы zgrep на многоядерном компьютере Как переместить один порт на другой (на одном компьютере)? Альтернатива su / sudo для barebone-системы Настройка темы значка для приложений на основе Qt в среде без kde Альтернативы Debian Live для постоянной системы Debian на USB Переименовать несколько файлов с двумя условиями / заменами в одну строку? Записать код состояния выхода из ssh Переместить содержимое папки на один уровень Отсутствует 32-битная библиотека на 64-битной установке Linux

Сравнить и объединить конфигурационный файл в CentOS

Я пытался настроить авто-обновление (для нескольких серверов) bash-скрипта через cron для файла конфигурации (на основе текста), загружая новый файл каждый день и заменяя его напрямую. Скрипт работает отлично, однако есть случай, когда иногда каждому серверу нужно будет иметь определенные настройки, отличные от основного файла конфигурации, например, одна из стандартной строки конфигурации будет:

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 

Вы действительно хотите объединить списки ценностей? То есть

 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 } }