如何将变量从ruby传递给sh命令

时间:2012-01-20 09:57:24

标签: ruby rake sh

我有一个运行的rake任务,代码很多。最后,我需要使用sftp和ssh来做一些事情。目前我无法实现自动化。有没有办法传递给stdout?

这似乎是一个简单的问题,但我无法在任何地方找到答案

#some ruby code
#more ruby code
sh "sftp myuser@hots" #this opens the sftp console
sh "put file" #this doesn't get run until sftp is exited
sh "put another_file" #neither does this

#more ruby code
sh "ssh host" # opens the ssh console
sh "some_action_on_host" # this doesn't get run until ssh is exited    

我知道有一些方法可以使用ruby进行sftp和ssh,但理想情况下我只想将变量和命令传递到控制台

2 个答案:

答案 0 :(得分:4)

所以你想运行sftp并向它发送一系列命令?怎么样:

sftp = IO.popen("sftp myuser@hots", "w+")
sftp << "put file\n"
sftp << "put another file\n"
sftp.flush # make sure to include this

答案 1 :(得分:0)

如果您不想使用ruby,那么您可能希望将shell命令包含在`(反引号字符)中。该字符串将传递给Kernel。方法。此方法将文本作为OS shell命令执行,并将命令的输出作为字符串返回,例如:

`ls`

`%x[]的替代语法。这样你就可以编写任何bash脚本:

%x[sftp myuser@hots <<COMMAND
  put #{file}
  quit
COMMAND]

请注意,此语法支持使用#{...}语法插入ruby表达式(类似于双引号字符串文字)。