Eu tenho tentado escrever um script bash simples que eu vou usar para instalar um aplicativo e atualizar seu arquivo de configuração. Estou tendo dificuldade para obter o arquivo de configuração modificado.
# DBHost=localhost
DBName=test
# DBPassword=
alguma sugestão como eu posso ficar acima modificado como abaixo?
DBHost=localhost
DBName=database
DBPassword=password
bash
shell-script
text-processing
configuration
compixtr
fonte
fonte
Respostas:
A melhor maneira depende se você espera que o arquivo também seja modificado por humanos, quão complexo é o arquivo e se você deseja que seu script tenha precedência se parecer que alguém quer um valor diferente. Ou seja, se o arquivo já contiver
DBPassword=swordfish
, você deseja mantê-lo ou substituí-lo porDBPassword=password
?Uma maneira comum de lidar com isso é delimitar uma seção do arquivo por “comentários mágicos” e editar apenas a parte entre esses comentários. Aqui está uma maneira de fazer isso com o awk. Se os comentários mágicos não estiverem presentes, a nova seção será adicionada no final do arquivo. Aviso: código não testado.
Essa abordagem não funciona bem se o programa que lê o arquivo de configuração não suportar várias linhas definindo o mesmo item de configuração. Nesse caso, você realmente precisará remover os antigos. Nesse caso, aconselho deixar os comentários intocados e adicionar suas próprias configurações no final.
fonte
Se isso é tudo que você precisa, você pode fazer algo como
Isto irá copiar o original
config.file
paraconfig.file.bak
e fazer as mudanças necessárias.fonte
Eu vou com "ex" no modo silencioso:
O
sed
comando de Terdon é compacto e eficiente. Mas a interação de um "documento aqui" cheio de comandos ex e interpolação de string de shell pode ser poderosa. Por exemplo, a senha pode ser substituída como o valor de uma variável do shell:Se você usa
vi
ouvim
conhece o modo ':', adicionar edições novas / melhores / diferentes também é bastante fácil.fonte