2014-03-06 290 views
1

用awk里面SSH当运行命令:从红宝石

puts `ssh -o StrictHostKeyChecking=no -i keyfile [email protected] "sudo cat file | awk '/^server/ {print \$2}' | sort -u"` 

运行此命令后,其只计算^server,却忽略了print $2命令。 我得到整条线而不是第二个单词。

+0

您是否还在bash提示符下尝试了'ssh'命令,以确保它符合您的期望? – lurker

+0

该命令在ruby的本地工作,但是当我尝试从另一个主机使用ssh时,它不起作用。 – gal

+0

查看我的更新回答。 – lurker

回答

0

你正在运行几个shell处理层,所以你需要一个额外的反斜杠:

puts `ssh -o StrictHostKeyChecking=no -i keyfile [email protected] "sudo cat file | awk '/^server/ {print \\$2}' | sort -u"` 
0

如果你改变了这个会发生什么:

sudo cat file | awk '/^server/ {print \$2}' | sort -u 

这样:

sudo cat file | grep '/^server' | awk '{ print \$2 }' | sort -u 

如果仍然没有工作,尽量不要逃避$ - 尝试$ 2,而不是\ $ 2

+0

它的作品,当我尝试从命令行运行它,但是当我从红宝石内运行,它忽略了打印:( – gal

0

可能更容易被分解成碎片。同样使用ruby的单引号机制可以按照您的意图发送命令。

cmd = %q(sudo cat file | awk '/^server/ {print $2}' | sort -u) 
puts %x(ssh -o StrictHostKeyChecking=no -i keyfile [email protected] #{cmd})