我正在尝试执行一个命令ssh
包含首先执行的“子代码”或 $(子代码)(我一直使用它,但我不知道其正式名称),但在目标服务器上。
为了便于讨论,假设这是我要使用的命令。当然这可以通过hostname
,但这只是一个简化的示例,其中包含我想要使用的所有格式化魔法。
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
我想要一个包括使用正确转义的答案` or $() because I'd like to know if it's possible.
echo` 可能更复杂。
Try this
ssh myServer "uname -a | awk '{print \$2}' "
使用双引号"
为了对您将远程执行的命令进行分组。
你还需要逃离$
in the $2
参数,这样它就不会在本地计算,而是传递给awk
远程。
Edit:
如果您想包括$(
)
,你必须再次逃离$
符号,像这样:
ssh myServer "echo \$(uname -a | awk '{print \$2}') "
你也可以逃脱backtick`,像这样:
ssh myServer "echo \`uname -a | awk '{print \$2}'\` "
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)