如何将数据通过stdin管道传递给使用Net::SSH启动的进程?

11
我正在本地生成一个数据源,想要通过Net::SSH将其导入到远程进程中进行处理。 类似于:
echo foosball | sed 's/foo/bar/g'

仅仅echo foosball部分将是本地机器上的数据源。

不需要以下内容:

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

我真的希望有实时地将数据流传输到进程中 ;)

1个回答

9

好的,我想通了:

#!/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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接