Ruby 如何将数据管道传输到通过stdin上的Net::SSH启动的进程?

Ruby 如何将数据管道传输到通过stdin上的Net::SSH启动的进程?,ruby,ssh,Ruby,Ssh,我正在本地机器上生成一个数据提要,我希望通过Net::SSH将其导入远程进程 差不多 echo foosball | sed 's/foo/bar/g' 只是echo foosball部分将是本地机器上的数据馈送 我不是在寻找的是: data = "foosball" ssh.exec!("echo #{data} | sed 's/foo/bar/g'") 我真的想要一个数据流实时地通过管道传输到流程中;) 好吧,我想起来了: #!/usr/bin/env ruby require '

我正在本地机器上生成一个数据提要,我希望通过Net::SSH将其导入远程进程

差不多

echo foosball | sed 's/foo/bar/g'
只是
echo foosball
部分将是本地机器上的数据馈送

我不是在寻找的是:

data = "foosball"
ssh.exec!("echo #{data} | sed 's/foo/bar/g'")

我真的想要一个数据流实时地通过管道传输到流程中;)

好吧,我想起来了:

#!/usr/bin/env ruby 

require 'rubygems'
require 'net/ssh'

res = ""
c = Net::SSH.start("127.0.0.1", "xxx", :password => "xxx")
c.open_channel do |channel|
  channel.exec("sed 's/foo/bar/g'") do |ch, success|
    channel.on_data do |ch,data|
      res << data
    end

    channel.send_data "foosball"
    channel.eof!
  end
end
c.loop
puts res # => "barsball"
#/usr/bin/env ruby
需要“rubygems”
需要“net/ssh”
res=“”
c=Net::SSH.start(“127.0.0.1”,“xxx”,“密码=>“xxx”)
c、 开放式信道do信道|
channel.exec(“sed's/foo/bar/g')do | ch,success|
通道.on|U数据do|ch,数据|
res“barsball”