Добавление записей файла конфигурации в определенные разделы

Я пытаюсь написать скрипт, который настраивает mySQL. Предположим, я хочу настроить порт на 3333, поэтому я хочу, чтобы в файле конфигурации содержались строки

[mysqld] port=3333 [client] port=3333

Сначала я просто echo вводил новые строки:

echo "[mysqld]" >> /etc/mysql/my.cnf echo "port=3333" >> /etc/mysql/my.cnf echo "[client]" >> /etc/mysql/my.cnf echo "port=3333" >> /etc/mysql/my.cnf

Но потом я понял, что файл конфигурации будет содержать все записи несколько раз, если я запустил его несколько раз. Поэтому я применил проверку с помощью функции:

function appendconfig { grep -qF "$1" "$2" || echo "$1" >> "$2" } cfg=/etc/mysql/my.cnf appendconfig "[client]" $cfg appendconfig "port=3333" $cfg appendconfig "[mysqld]" $cfg appendconfig "port=3333" $cfg

Эта функция добавит только строку, если она еще не существует.

К сожалению, при настройке port=3333 в [mysqld], он обнаруживает, что port=3333 уже присутствует (но в [client]).

Каким образом я мог бы писать конфигурационные файлы, такие как файл mySQL в сценарии Linux Bash?

В основном я ищу что-то вроде

setconfigvalue <section> <value> <file>

, поэтому я мог бы написать

setconfigvalue [mysqld] port=3333 /etc/mysql/my.cnf

Я пробовал предложения от этого U & amp ; L вопрос с сестринским сайтом «Редактирование INI-файлов со сценарием».

В принятом ответе содержатся только решения, жестко закодированные для проблемы OP. Мне нужно было бы их адаптировать, но это ошибка.

Я попробовал crudini, который кажется правильным инструментом из его синтаксиса. Но он не может анализировать файлы конфигурации mySQL из-за того, что включает:

crudini --get /etc/mysql/my.cnf client port File contains parsing errors: <???> [line 22]: !includedir /etc/mysql/conf.d/ [line 23]: !includedir /etc/mysql/mariadb.conf.d/
1
задан 14 January 2018 в 03:57

3 ответа

Оказалось, что у меня есть версия 0.7-1 из crudini, установленная из официальных пакетов. На момент написания этой статьи появилась более новая версия.

Я заменил старую версию новой версией, используя wget:

wget -q https://raw.githubusercontent.com/pixelb/crudini/master/crud‌​ini -O /usr/bin/crudini

Таким образом, появилось сообщение об ошибке разбора:

crudini --get /etc/mysql/my.cnf mysqld port
Parameter not found: port

И я смог установить нужные параметры:

crudini --set /etc/mysql/my.cnf mysqld port 3333
crudini --get /etc/mysql/my.cnf mysqld port
3333
2
ответ дан 22 May 2018 в 15:32

Оказалось, что у меня есть версия 0.7-1 из crudini, установленная из официальных пакетов. На момент написания этой статьи появилась более новая версия.

Я заменил старую версию новой версией, используя wget:

wget -q https://raw.githubusercontent.com/pixelb/crudini/master/crud‌​ini -O /usr/bin/crudini

Таким образом, появилось сообщение об ошибке разбора:

crudini --get /etc/mysql/my.cnf mysqld port Parameter not found: port

И я смог установить нужные параметры:

crudini --set /etc/mysql/my.cnf mysqld port 3333 crudini --get /etc/mysql/my.cnf mysqld port 3333
2
ответ дан 17 July 2018 в 23:07

Оказалось, что у меня есть версия 0.7-1 из crudini, установленная из официальных пакетов. На момент написания этой статьи появилась более новая версия.

Я заменил старую версию новой версией, используя wget:

wget -q https://raw.githubusercontent.com/pixelb/crudini/master/crud‌​ini -O /usr/bin/crudini

Таким образом, появилось сообщение об ошибке разбора:

crudini --get /etc/mysql/my.cnf mysqld port Parameter not found: port

И я смог установить нужные параметры:

crudini --set /etc/mysql/my.cnf mysqld port 3333 crudini --get /etc/mysql/my.cnf mysqld port 3333
2
ответ дан 24 July 2018 в 13:40

Другие вопросы по тегам:

Похожие вопросы: