2016-12-01 13 views
0

リモートサーバーの/ etc/sudoersに「demouser」というユーザーを追加しようとしていますが、変数からユーザー名を渡したいとします。bed変数sedを使用したリモートコマンドからの置換

これは動作しますが、私はこれを使用してみましたが、それは働いていない代わりにdemouser

ssh [email protected]$remote_host -t 'sudo sed -i "\$ademouser  ALL=(ALL)  NOPASSWD:ALL" /etc/sudoers' 

の変数$USERNAMEを使用します。

export USERNAME=demouser  
ssh [email protected]_host bash -c "'sudo sed -i "\$a$USERNAME ALL=(ALL)  NOPASSWD:ALL" /etc/sudoers'" 
Error: -bash: syntax error near unexpected token `(' 
+0

ではなく、ファイルの末尾に行を追加するためにsedを使用して、それはそうです* 'sudoのbashの-c"を行うことが容易にエコー "demouster ..." >>/etc/sudoers''。 –

答えて

1

パラメータは1つがそれらを閉じ、代わりに二重引用符で展開することができ、単一引用符で拡大しません。

ssh [email protected] 'sed "s/'"$localVar"'/replacement/" file' 
         ^^ 
         |Enter double quotes to avoid word splitting and globbing 
         Exit single quotes to expand on client side. 

ます。ただし、コマンドがサーバに送信することを知っておくべきである:

sed "s/abc/replacement/" file 

サーバー上で二重引用符を使用しているため問題が発生する可能性がありますが、一重引用符も送信できますが、すぐに混乱します。

ssh [email protected] 'sed '\''s/'"$localVar"'/replacement/'\'' file' 
       ^^ 
        | Escaped remote single quote 
        Close local single quote 

これになるだろう:それは*ロットだろうよう

sed 's/abc/replacement' file 
+0

素晴らしい...あなたの素早い応答のために@andlrcに感謝します – Sridhar

関連する問題