2014-03-06 52 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})