代码之家  ›  专栏  ›  技术社区  ›  flitzwald

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

  •  10
  • flitzwald  · 技术社区  · 14 年前

    我正在本地机器上生成一个数据馈送,我想通过net::ssh将其导入远程进程。

    类似的东西

    echo foosball | sed 's/foo/bar/g'
    

    就这样 echo foosball 部分是本地机器上的数据馈送。

    我是什么 不是 寻找IS:

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

    我真的希望实时地将数据流导入到流程中;)

    1 回复  |  直到 14 年前
        1
  •  8
  •   flitzwald    14 年前

    好吧,我想出来了:

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