2010-09-12 30 views
9

Tôi đang tạo nguồn cấp dữ liệu trên máy cục bộ, mà tôi muốn đưa vào một quy trình từ xa qua Net :: SSH.Làm cách nào để tôi có thể chuyển dữ liệu vào quá trình bắt đầu qua Net :: SSH trên stdin?

Something như

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

Chỉ cần rằng phần echo foosball sẽ là thức ăn dữ liệu trên máy cục bộ.

Những gì tôi KHÔNG tìm kiếm là:

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

Tôi thực sự muốn có một dòng dữ liệu cấp nước tập trung vào quá trình theo thời gian thực;)

Trả lời

7

Được rồi, tôi figured it out:

#!/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" 
Các vấn đề liên quan