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
スクリプト(2回言及しないためMASQUERADE_AS
):
s/dnl \(MASQUERADE_AS\).*/\1(`domain.com')dnl/