2010-09-12 11 views
9

Estoy generando una fuente de datos en la máquina local, que quiero canalizar en un proceso remoto a través de Net :: SSH.¿Cómo puedo canalizar datos a un proceso iniciado a través de Net :: SSH en stdin?

Algo así como

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

Así que la parte echo foosball sería la fuente de datos en la máquina local.

Lo que estoy NO buscando es:

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

Realmente quiero un flujo de datos de cañerías en el proceso en tiempo real;)

Respuesta

7

Vale, lo he descubierto:

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