2010-09-12 14 views
9

Sto generando un feed di dati sul computer locale, che desidero canalizzare in un processo remoto tramite Net :: SSH.Come posso inviare dati a un processo avviato tramite Net :: SSH su stdin?

Qualcosa di simile

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

Basta che la parte echo foosball sarebbe il feed di dati sulla macchina locale.

Quello che sto NON cercando è:

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

voglio davvero un flusso di dati convogliate nel processo in tempo reale;)

risposta

7

Va bene, ho capito:

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