【问题标题】:Pass sed via ssh command通过 ssh 命令传递 sed
【发布时间】:2016-07-25 07:34:36
【问题描述】:

我尝试通过 ssh 命令将 sed 作为 [1] 传递给 ssh 命令,但它不起作用。 我对主机进行 ssh,例如“ssh ld3646”。在我的控制台中,我输入

ssh ld3646 'sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs'

文件 /etc/sysconfig/nfs 根本没有改变。当我执行 'ssh ld3646' 并输入

sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs'

有人可以帮忙看看为什么它不起作用吗?

【问题讨论】:

标签: linux bash ssh sed


【解决方案1】:

注意你有两组单引号吗?那是行不通的。单引号不嵌套。幸运的是,外部引号不是必需的。

ssh ld3646 sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs

【讨论】:

    【解决方案2】:

    您遇到报价混乱。

    sed 脚本之前的引号退出以sed 开头的带引号的字符串。

    我在this answer 中提供了一些处理嵌套引号的策略,这可能很有启发性。在您的情况下,一个简单的策略可能只是更改引号:

    ssh ld3646 "sed -i 's/USE_KERNEL_NFSD_NUMBER=\"4\"/USE_KERNEL_NFSD_NUMBER=\"64\"/g' /etc/sysconfig/nfs"
    

    注意嵌入的双引号被转义,以避免这个问题。

    视觉简化的另一个选择可能是使用变量:

    sedscript='s/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g'
    ssh ld3646 "sed -i '$sedscript'"
    

    最后一个有效,因为嵌入在双引号字符串中的单引号不会阻止变量扩展。

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2013-07-08
      • 2021-02-25
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多