我尝试通过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'
有人可以帮忙解决它为什么不起作用?
答案 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'"
最后一个有效,因为嵌入双引号字符串的单引号不会阻止变量扩展。