No puedo hacer que esto funcione en 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
Básicamente quiero este sed que funciona en una línea de comando normal pero se interrumpe dentro de ssh:
sed -i -e "s/dnl MASQUERADE_AS.*$/MASQUERADE_AS(\`domain.com\')dnl/" /etc/mail/sendmail.mc
¿Alguien tiene alguna idea? muy apreciado.
Respuesta1
Usandola idea de jeffde usar un documento aquí para el sed
script en sí (bueno, menciona una "cadena aquí", pero creo que también tendrías problemas para citar allí):
ssh host 'sed -i -f - /etc/mail/sendmail.mc' <<'SED_END'
s/dnl MASQUERADE_AS.*/MASQUERADE_AS(`domain.com')dnl/
SED_END
Si sed
el host remoto puede leer un sed
script desde la entrada estándar usando -f -
, entonces esto probablemente funcione (de lo contrario, por ejemplo en algunos sistemas BSD, intente -f /dev/stdin
).
El comando llama sed
al host remoto y pasa el sed
script de edición en la entrada estándar. El sed
script tiene comillas simples debido a las comillas en 'SED_END'
, por lo que el shell no intentará expandir elementos en su texto.
También eliminé el final $
de la expresión regular, ya que no es necesario ( .*
de todos modos coincidiría con el final de la línea).
Un guión un poco más corto sed
(simplemente evitando mencionarlo MASQUERADE_AS
dos veces):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/