2016-12-01 129 views
0

我想添加一个用户“demouser”到远程服务器的/ etc/sudoers,我想从一个变量传递用户名。bash变量替换从远程命令使用sed

这工作,但我想用一个变量$USERNAME代替demouser

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

我用这个尝试,但它不工作。

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添加一行到文件的结尾,好像这将是一个*很多*容易做'须藤的bash -c'回声“demouster ...”>>/etc/sudoers''。 –

回答

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