转义单引号 ssh 远程命令

Posted

技术标签:

【中文标题】转义单引号 ssh 远程命令【英文标题】:Escape single quotes ssh remote command 【发布时间】:2013-03-12 03:53:48 【问题描述】:

我阅读了任何通过 ssh 对远程命令转义单引号的解决方案。但是任何工作狂。

我在努力

ssh root@server "ps uax|grep bac | grep -v grep | awk ' print $2 ' > /tmp/back.tmp"

不要在 awk 中工作

ssh root@server "ps uax|grep bac | grep -v grep | awk \' print $2 \' > /tmp/back.tmp"
....
awk: '
awk: ^ caracter ''' inválido en la expresión

并尝试将单个配额放在命令上,但也不起作用。

感谢帮助

【问题讨论】:

【参考方案1】:

在您的第一次尝试中,您使用双引号 ",因此您需要转义 $ 字符:

ssh root@server "ps uax|grep bac | grep -v grep | awk ' print \$2 ' > /tmp/back.tmp"
                                                               ▲

另外,您可以使用:

 ps uax | grep 'ba[c]' | ...

所以你不需要grep -v grep 步骤。

【讨论】:

Wauuuuu...非常感谢...为这个问题花费太多...美好的一天【参考方案2】:

ssh 命令将在主机名之后键入的所有文本视为要执行的远程命令。至关重要的是,这对您的问题意味着您不需要像您所做的那样引用整个命令。相反,您可以像在远程系统上一样直接发送命令。

这简化了报价问题的处理,因为它减少了您需要使用的报价数量。由于您不会使用引号,所有特殊的 bash 字符都需要使用反斜杠进行转义

在你的情况下,你需要输入,

ssh root@server ps uax \| grep ba[c] \| \' print \$2 \' \> /tmp/back.tmp

或者您可以将单引号双引号而不是转义它们(在这两种情况下,您都需要转义美元符号)

ssh root@server ps uax \| grep ba[c] \| "' print \$2 '" \> /tmp/back.tmp

老实说,这感觉有点复杂,但我发现在处理向涉及更复杂使用引号的远程系统发送命令时,这些知识非常有价值。

【讨论】:

以上是关于转义单引号 ssh 远程命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ssh / 远程 bash 命令中转义单引号字符?

Linux下借助ssh进行shell远程执行

使用 sshpass 时如何转义单引号

关于在使用ssh命令远程执行命令中有转义字符的问题

使用/解析远程变量时如何正确转义单引号? [复制]

shell远程执行命令(命令行与脚本)