【问题标题】:Run sed remotely via SSH: Probably quoting issue通过 SSH 远程运行 sed:可能是引用问题
【发布时间】:2014-07-08 21:21:29
【问题描述】:

我想通过 SSH 在多个主机上远程替换 /etc/bashrc。

ssh myhost sed 's/\\u\@\\h/\\u\@\\h (myhost)/' /etc/bashrc

给我这个错误:

bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `sed s/\\u\@\\h/\\u\@\\h (myhost)/ /etc/bashrc'

它直接在 myhost 上运行而没有错误。

【问题讨论】:

    标签: bash ssh sed


    【解决方案1】:

    单引号被本地shell去掉,让远程主机看到如下命令行:

    sed s/\\u\@\\h/\\u\@\\h (myhost)/ /etc/bashrc
    

    您需要在本地添加额外的引用层,这也需要额外的反斜杠转义。

    ssh myhost "sed 's/\\\\u\\@\\\\h/\\\\u\\@\\\\h (myhost)/' /etc/bashrc"
    

    【讨论】:

    • 如果使用双引号,则必须转义 \:"sed 's/\\\\u\\@...
    • 呃,我害怕那个。
    【解决方案2】:

    尝试添加

    (

    在括号之前你也不必使用:

     sed 's/something/another/'
    

    你可以使用任何类似的东西:

     sed 's:something:another:'
     sed 's|something|another|'
    

    或其他一些人进行分隔,从而在使用时不必使用反斜杠

    //文件夹/

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多