我试图通过ssh
执行一个包含sub-code
或$(子代码)(我一直使用它,但我不知道它的正式名称)的命令,首先在目标服务器上执行。
为了便于讨论,假设这是我要使用的命令。当然,这可以使用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.
回显的答案。
发布于 2013-02-05 20:28:19
如何通过管道传输命令的输出并在本地运行awk?
ssh yourhost uname -a | awk '{ print $2 } '
发布于 2019-10-04 21:10:25
只是一些额外的注意事项:
在我的例子中,$
的转义没有帮助:
ts1350:> ssh sysadm@node "grep feature features.txt| awk '{print $6}' "
Password:
A feature -name ue_trace_mme | off
ts1350:> ssh sysadm@node "grep feature features.txt| awk '{print \$6}' "
Password:
awk: cmd. line:1: {print \}
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: {print \}
awk: cmd. line:1: ^ syntax error
ts1350:> ssh sysadm@node "grep feature features.txt| awk '{print \\$6}' "
Password:
awk: cmd. line:1: {print \\}
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: {print \\}
awk: cmd. line:1: ^ syntax error
当在$
和数字之间添加一个space
时:
Fri Oct 4 14:49:28 CEST 2019
ts1350:> ssh sysadm@node "grep feature features.txt| awk '{print $ 6}' "
Password:
off
希望这种第二种方式能帮助像我这样的人。
感谢@dave在他的回答中:How to print a specific column with awk on a remote ssh session?
发布于 2013-05-15 04:27:59
如果您正在尝试获取主机名,请使用:
ssh myServer "uname -n"
https://stackoverflow.com/questions/14707307
复制相似问题