unterminated - executando sed a partir de um script .sh, para substituir uma string que inclua um “=”

-1

Estou realmente lutando com um tipo de problema muito bobo, mas complexo, ao executar sed de um script .sh , para substituir uma string que inclua = .

Meu comando, sed -i 's/^host=.*/host=myhost1/' /opt/file.txt roda muito bem enquanto eu executo do terminal.

No entanto, enquanto eu tento este comando CMD a partir de um arquivo .sh, ele me mostra o erro abaixo:

CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt"

O erro que recebo é:

sed: -e expression #1, char 7: unterminated 's' command

Olhando para o erro, eu posso encontrar o problema com = nas strings de pesquisa / substituição. Eu tentei escapar disso, e muitas outras opções, mas não consegui. Mesmo quando eu removo o = das strings, ele também funciona bem no .sh.

    
por HelloUbantu 03.03.2015 / 01:30

1 resposta

0

Quando você digita CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt" , está usando " (aspas duplas), pedindo ao shell para interpretar caracteres especiais como * .

Ele substituirá .* por uma lista de todos os arquivos no diretório atual que começam com . , o que confunde sed .

Torne o * não-específico com uma barra invertida \* . Também para echo "$CMD" para ver os nomes dos arquivos.

    
por waltinator 08.03.2015 / 19:25