Как я могу передать данные процессу, запущенному через Net :: SSH на stdin? - PullRequest
10 голосов
/ 12 сентября 2010

Я создаю поток данных на локальном компьютере, который я хочу передать в удаленный процесс через Net :: SSH.

Что-то вроде

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

Только то, что часть echo foosball будет источником данных на локальном компьютере.

Что я НЕ ищу:

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

Я действительно хочу, чтобы поток данных передавался в процесс в реальном времени;)

1 Ответ

8 голосов
/ 13 ноября 2010

Хорошо, я понял это:

#!/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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...