Perdendo quebra de linha na manipulação de string

0

Howdie,

Eu tenho um script bash que instala o phppgadmin e substitui o alias phppgadmin por! phppgadmin.

Este é o meu script:

#installing phppgadmin and tell my Apache conf file to include it
apt-get install --force-yes phppgadmin && echo 'Include /etc/phppgadmin/apache.conf' >> /my/conf/apache2/apache2.conf

# the string manipulation
phppgadmin='cat /etc/phppgadmin/apache.conf'
phppgadmin=${phppgadmin/Alias \/phppgadmin/Alias \/!phppgadmin}

#saving result
echo -e $phppgadmin > /etc/phppgadmin/apache.conf

Isso funciona bem, exceto que as quebras de linha se perdem ao longo do caminho, então é claro que o Apache reclama que o arquivo não é legível. Eu tentei com gato -E, sem sucesso.

Alguma ideia?

EDIT: Ok, parece que eu não recebi o que cat -E estava fazendo. Na verdade, substitui as quebras de linha por um sinal de dólar, então é isso que eu comecei a trabalhar agora:

phppgadmin='cat -E /etc/phppgadmin/apache.conf'
phppgadmin=${phppgadmin/Alias \/phppgadmin/Alias \/!phppgadmin}
phppgadmin=${phppgadmin//$/'\n'}

echo -e $phppgadmin > /etc/phppgadmin/apache.conf

Então, problema resolvido!

    
por François ッ Vespa ت 12.06.2011 / 09:25

1 resposta

0

Para modificar os arquivos de configuração, sed é mais confiável do que o bash:

sed -i 's|^Alias /phppgadmin|Alias /!phppgadmin|' /etc/phppgadmin/apache.conf

Você está perdendo novas linhas porque passou $phppgadmin para echo unquoted, o que significa que o shell divide o conteúdo da variável no espaço em branco. Seu script original teria funcionado se você usou "$phppgadmin" em seu lugar.

Além disso:

  1. Não use 'cat' , use '<file' ou $(<file) .

  2. ${phppgadmin//$/'\n'} destruirá qualquer real $ do arquivo de configuração original.

Script reconfigurado, ainda não é tão confiável quanto o comando sed acima:

conf=$(< /etc/phppgadmin/apache.conf)
conf=${conf/Alias \/phppgadmin/Alias \/!phppgadmin}
echo "$conf" > /etc/phppgadmin/apache.conf
    
por 12.06.2011 / 12:51

Tags