ssh 远程命令执行 引用

ssh 远程命令执行 引用

我发现这个解决方案对我有用,但我不明白它是如何工作的,因为 sed 命令将其自己的参数括在单引号中,并且整个 ssh 命令也用单引号传递。这是从 OSX (bsd) 运行的。

ssh -t -p 22 root@thehost 'for user in $(/bin/ls -A1 /var/cpanel/users) ; do if grep -q RS=paper /var/cpanel/users/${user}; then sed -i 's/^RS=paper_lantern$/RS=x3/' /var/cpanel/users/${user}; fi; done'

有人能向我解释为什么这样做有效吗?为什么我不需要转义 sed 命令的单引号 - 我在任何地方都找不到参考资料?谢谢。

答案1

你不需要,因为你的 sed 字符串不需要被引用,事实上,在远程服务器上,它也没有被引用。

作为参数传递给 ssh 命令的内容如下所示:

for user in $(/bin/ls -A1 /var/cpanel/users) ; do if grep -q RS=paper /var/cpanel/users/${user}; then sed -i s/^RS=paper_lantern$/RS=x3/ /var/cpanel/users/${user}; fi; done

并且它运行良好,因为 sed 命令的参数中没有空格。

如果您想传递带有空格的 sed 参数,您应该像这样转义单引号:

'for user in $(/bin/ls -A1 /var/cpanel/users) ; do if grep -q RS=paper /var/cpanel/users/${user}; then sed -i '\''s/^RS=paper_lantern$/RS=x3/'\'' /var/cpanel/users/${user}; fi; done'

使用单引号时,您不能像这样转义单引号:\'

你必须使用技巧。你必须关闭引号,转义'并重新打开引号。('\''

相关内容