Estou tentando escrever um script que configura o mySQL. Vamos dizer que eu quero configurar a porta para 3333, então eu quero que o arquivo de configuração contenha as linhas
[mysqld]
port=3333
[client]
port=3333
No começo, eu estava simplesmente echo
ing as novas linhas:
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
Mas percebi que o arquivo de configuração conterá todas as entradas várias vezes caso eu o execute várias vezes. Por isso, apliquei uma verificação usando uma função:
function appendconfig {
grep -qF "" "" || echo "" >> ""
}
cfg=/etc/mysql/my.cnf
appendconfig "[client]" $cfg
appendconfig "port=3333" $cfg
appendconfig "[mysqld]" $cfg
appendconfig "port=3333" $cfg
Essa função só adicionará a linha se ainda não existir.
Infelizmente, ao configurar port=3333
na seção [mysqld]
, ele detecta que port=3333
já está presente (mas em [client]
).
Como eu escreveria arquivos de configuração como o do mySQL em um script de bash do Linux?
Basicamente, estou procurando algo como
setconfigvalue <section> <value> <file>
para poder escrever
setconfigvalue [mysqld] port=3333 /etc/mysql/my.cnf
Eu tentei as sugestões de esta pergunta sobre o site irmão da U & amp; L "Editando o INI como arquivos com um script" .
A resposta aceita apenas fornece soluções que são codificadas para o problema do OP. Eu precisaria adaptá-los, mas isso é propenso a erros.
Eu tentei o crudini
, que parece ser a ferramenta certa para sua sintaxe. Mas não é possível analisar arquivos de configuração mySQL devido aos includes:
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/