não consigo fazer isso funcionar no bash/rhel 7:
ssh host "sed -i -e \"s/dnl MASQUERADE_AS.*\$/MASQUERADE_AS(\`domain.com\')dnl/\" /etc/mail/sendmail.mc"
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
eu essencialmente quero este sed que funciona em uma linha de comando normal, mas quebra no ssh:
sed -i -e "s/dnl MASQUERADE_AS.*$/MASQUERADE_AS(\`domain.com\')dnl/" /etc/mail/sendmail.mc
Alguém tem alguma ideia? muito apreciado.
Responder1
UsandoA ideia de Jeffde usar um documento aqui para o sed
script em si (bem, ele menciona uma "string aqui", mas você também teria problemas em citar lá, eu acho):
ssh host 'sed -i -f - /etc/mail/sendmail.mc' <<'SED_END'
s/dnl MASQUERADE_AS.*/MASQUERADE_AS(`domain.com')dnl/
SED_END
Se o sed
host remoto puder ler um sed
script da entrada padrão usando -f -
, então isso provavelmente funcionaria (caso contrário, por exemplo, em alguns sistemas BSD, tente -f /dev/stdin
).
O comando chama sed
o host remoto e passa o sed
script de edição na entrada padrão. O sed
script está entre aspas simples devido às aspas em 'SED_END'
, portanto o shell não tentará expandir as coisas em seu texto.
Também removi o final $
da expressão regular, pois não é necessário ( .*
corresponderia ao final da linha de qualquer maneira).
Um script um pouco mais curto sed
(evitando apenas mencionar MASQUERADE_AS
duas vezes):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/