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
사용제프의 생각스크립트 자체에 대해서는 여기 문서를 사용하십시오 sed
(음, 그는 "여기에 문자열"을 언급했지만 거기에서도 참조하는 데 문제가 있을 것이라고 생각합니다).
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/