如何在单SSH命令使用bash $(AWK)?(How to use bash $(awk) in

2019-07-19 06:49发布

我试图在执行一个命令ssh包含`子code`或$(子代码)(我用它所有的时间,但我不知道该正式名称)首先被执行,但目标服务器。

为了讨论的方便,让我们说,这是我想要使用的命令。 Ofcourse这是可以做到的hostname ,但是这仅仅是一个简单的例子,它包含的所有格式巫术我想使用。

echo `uname -a | awk '{print $2}'`

没问题。 但你如何逃离这个正确超过发送ssh在一个单一的命令? 下列哪项是错误的,因为它可以让服务器回复您的本地主机名。 子代码在本地执行:

ssh myServer echo `uname -a | awk '{print $2}'`

但是,想到的任何逃生ishness不工作:

$ 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`可能是更复杂的东西。

Answer 1:

试试这个

ssh myServer "uname -a | awk '{print \$2}' "

使用双引号" ,以团体,您远程执行命令。

您还需要躲避$$2的说法,所以它不是本地计算,而是转嫁到awk远程控制。

编辑:

如果你想包括$( )你又要躲避$符号,就像这样:

ssh myServer "echo \$(uname -a | awk '{print \$2}') "

您还可以逃避反引号 `,就像这样:

ssh myServer "echo \`uname -a | awk '{print \$2}'\` "


Answer 2:

关于管道命令的输出,怎么和awk本地运行?

ssh yourhost uname -a | awk '{ print $2 } '


Answer 3:

解决方法是创建具有一个命令文件的sh然后将它传递到ssh命令:

test.sh

echo `uname -a | awk '{print $2}'`

和命令:

ssh myServer 'bash -s' < test.sh

更新

不带引号的命令正常工作,以及:

ssh myServer uname -a | awk '{print $2}'


Answer 4:

最好是使用带有定界符 ssh ,以避免更复杂的命令处处逃避报价:

ssh -T myServer <<-'EOF'
uname -a | awk '{print $2}'
exit
EOF


Answer 5:

如果您想获得主机名,使用方法:

ssh myServer "uname -n"



文章来源: How to use bash $(awk) in single ssh-command?
标签: bash ssh awk