2010-09-12 16 views
9

Generuję plik danych na komputerze lokalnym, który chcę podłączyć do zdalnego procesu przez Net :: SSH.Jak mogę potokować dane do procesu rozpoczętego przez Net :: SSH na stdin?

Coś

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

Wystarczy, że echo foosball część byłaby pasza dane na komputerze lokalnym.

Co jestem NIE szukasz:

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

naprawdę chcę strumień danych potokiem do procesu w czasie rzeczywistym;)

Odpowiedz

7

Dobra, zorientowaliśmy się:

#!/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" 
Powiązane problemy