ruby - 如何将数据通过管道传输到通过标准输入上的 Net::SSH 启动的进程?

标签 ruby ssh

我正在本地机器上生成数据源,我想通过 Net::SSH 将其传输到远程进程。

有点像

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

只是 echo foosball 部分将是本地计算机上的数据馈送。

要找的是:

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

我真的想要实时将数据流传输到流程中;)

最佳答案

好吧,我明白了:

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

关于ruby - 如何将数据通过管道传输到通过标准输入上的 Net::SSH 启动的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695138/

相关文章:

ruby-on-rails - 正则表达式允许 1-500 个字符

github 使用智能 HTTP

ruby-on-rails - 在 Ruby on Rails 上将日期时间转换为 mysql 格式

ruby-on-rails - Rails 模型中 @ 变量的解释

ruby-on-rails - 如何替换字符串并保留大写?

linux - SSH 登录权限被拒绝

mysql - 如何通过 ssh 在 bash stdout 中查看 mysql 状态消息?

ssh - 使用ssh在远程计算机上运行命令

linux - GitLab : You are not allowed to access master! 将 gitlab 移动到另一台服务器后

ruby-on-rails - 在 Ruby on Rails 中用 cucumber/capybara 测试弹出窗口