我试图通过ssh执行一个单一命令,该命令包含’子代码’或$(子代码)(我一直使用它,但不知道该代码的正式名称)首先被执行,但是目标服务器。
为了论证,让我们说这是我想要使用的命令。当然这可以用主机名来完成,但这只是一个简化的例子,它包含了我想要使用的所有格式化魔法。
echo `uname -a | awk '{print $2}'`
没问题。但是,如何正确地将其转发到单一命令中的ssh?以下是错误的,因为它允许服务器回复您的本地主机名。子代码在本地执行:
ssh myServer echo `uname -a | awk '{print $2}'`
但是,任何想到的逃避意识都不行:
$ ssh myServer echo \`uname -a | awk '{print $2}'\` awk: cmd. line:1: {print $2}` awk: cmd. line:1: ^ invalid char '`' in expression $ ssh myServer echo \$(uname -a | awk '{print $2}') bash: Syntax error near unexpected token `(' $ ssh myServer echo \$\(uname -a | awk '{print $2}') bash: Syntax error near unexpected token `)' $ ssh myServer echo \$\(uname -a | awk '{print $2}'\) awk: cmd. line:1: {print $2}) awk: cmd. line:1: ^ Syntax error bash: -c: line 0: unexpected EOF while looking for matching `)' bash: -c: line 1: Syntax error: unexpected end of file
我想要一个答案,包括使用正确转义的`或$(),因为我想知道是否可能。可能会更复杂一些。
尝试这个
原文链接:https://www.f2er.com/bash/387342.htmlssh myServer "uname -a | awk '{print \$2}' "
使用双引号“来分组您将远程执行的命令。
您还需要在$ 2参数中转义$,以使其不在本地计算,而是远程传递给awk。
编辑:
如果你想包括$(),你再次必须逃避$符号,像这样:
ssh myServer "echo \$(uname -a | awk '{print \$2}') "
你也可以逃离反驳`,像这样:
ssh myServer "echo \`uname -a | awk '{print \$2}'\` "