通过ssh命令传递sed

时间:2016-04-05 11:25:00

标签: linux bash ssh sed

我尝试通过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'

有人可以帮忙解决它为什么不起作用?

2 个答案:

答案 0 :(得分:0)

注意你有两组单引号?这不起作用。单引号不会嵌套。幸运的是,外部报价集是不必要的。

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

答案 1 :(得分:0)

您遇到报价混淆。

sed脚本之前的引号EXITS引用以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'"

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