用awk里面SSH当运行命令:从红宝石
puts `ssh -o StrictHostKeyChecking=no -i keyfile [email protected] "sudo cat file | awk '/^server/ {print \$2}' | sort -u"`
运行此命令后,其只计算^server
,却忽略了print $2
命令。 我得到整条线而不是第二个单词。
用awk里面SSH当运行命令:从红宝石
puts `ssh -o StrictHostKeyChecking=no -i keyfile [email protected] "sudo cat file | awk '/^server/ {print \$2}' | sort -u"`
运行此命令后,其只计算^server
,却忽略了print $2
命令。 我得到整条线而不是第二个单词。
你正在运行几个shell处理层,所以你需要一个额外的反斜杠:
puts `ssh -o StrictHostKeyChecking=no -i keyfile [email protected] "sudo cat file | awk '/^server/ {print \\$2}' | sort -u"`
如果你改变了这个会发生什么:
sudo cat file | awk '/^server/ {print \$2}' | sort -u
这样:
sudo cat file | grep '/^server' | awk '{ print \$2 }' | sort -u
如果仍然没有工作,尽量不要逃避$ - 尝试$ 2,而不是\ $ 2
它的作品,当我尝试从命令行运行它,但是当我从红宝石内运行,它忽略了打印:( – gal
可能更容易被分解成碎片。同样使用ruby的单引号机制可以按照您的意图发送命令。
cmd = %q(sudo cat file | awk '/^server/ {print $2}' | sort -u)
puts %x(ssh -o StrictHostKeyChecking=no -i keyfile [email protected] #{cmd})
您是否还在bash提示符下尝试了'ssh'命令,以确保它符合您的期望? – lurker
该命令在ruby的本地工作,但是当我尝试从另一个主机使用ssh时,它不起作用。 – gal
查看我的更新回答。 – lurker