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
나는 본질적으로 일반 명령줄에서 작동하지만 ssh 내에서는 중단되는 이 sed를 원합니다.
sed -i -e "s/dnl MASQUERADE_AS.*$/MASQUERADE_AS(\`domain.com\')dnl/" /etc/mail/sendmail.mc
누구 아이디어 있어? 매우 감사.
답변1
사용제프의 아이디어스크립트 자체 에 대해 here-document를 사용하는 것입니다 sed
(글쎄, 그는 "here-string"을 언급하지만 거기에 인용하는 데에도 문제가 있을 것이라고 생각합니다).
ssh host 'sed -i -f - /etc/mail/sendmail.mc' <<'SED_END'
s/dnl MASQUERADE_AS.*/MASQUERADE_AS(`domain.com')dnl/
SED_END
sed
원격 호스트의 가 를 sed
사용하여 표준 입력에서 스크립트를 읽을 수 있다면 -f -
아마도 작동할 것입니다(그렇지 않은 경우, 예를 들어 일부 BSD 시스템에서는 시도 -f /dev/stdin
).
명령 호출sed
원격 호스트를 호출하고 sed
표준 입력으로 편집 스크립트를 전달합니다. 스크립트 sed
는 의 따옴표로 인해 작은따옴표로 묶여 있으므로 'SED_END'
쉘은 텍스트의 내용을 확장하려고 시도하지 않습니다.
$
또한 필요하지 않기 때문에 정규식에서 후행을 제거했습니다 ( .*
어쨌든 줄의 끝과 일치합니다).
약간 더 짧은 sed
스크립트(두 번 언급하지 않음 MASQUERADE_AS
):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/