净::SSH::多使用本届会议。exec,你怎么得到输出直接走呢?红宝石

StackOverflow https://stackoverflow.com/questions/1383282

  •  21-09-2019
  •  | 
  •  

所以我一直试图使用Net::SSH::多登录到多个机器使用通过SSH,然后执行命令在遥远的机会。exec("some_command").

代码:

#!/usr/bin/ruby
require 'rubygems'
require 'net/ssh'
require 'net/ssh/multi'

Net::SSH::Multi.start do |session|
        # Connect to remote machines
        ### Change this!!###
        session.use 'user@server'

        loop = 1
        while loop == 1
                printf(">> ")
                command = gets.chomp
                if command == "quit" then
                        loop = 0
                else
                        session.exec(command)do |ch, stream, data|
                          puts "[#{ch[:host]} : #{stream}] #{data}"
                        end
                end
        end
end

我的问题的时刻,当我进入一个命令在交互式提示,用"会议。exec"不返回率输出我退出程序,我想知道,如果任何人已经遇到这个问题,并可以告诉我如何去解决这个问题?

有帮助吗?

解决方案

session.exec后添加session.loop允许程序等待输出。

如:

session.exec(command)do |ch, stream, data|
  puts "[#{ch[:host]} : #{stream}] #{data}"
end

session.loop
# Or session.wait also does the same job.

其他提示

看看一个 在这里,.的 exec 方法似乎产量它的结果所提供的区块。

例从文件:

session.exec("command") do |ch, stream, data|
  puts "[#{ch[:host]} : #{stream}] #{data}"
end

免责声明:我没有试这个我自己。它可以工作或没有。让我们知道,当它的工作!

的调用exec后取出while循环和呼叫session.loop。是这样的:

Net::SSH::Multi.start do |session|
  # Connect to remote machines
  ### Change this!!###
  session.use 'user@server'

  session.exec(command)do |ch, stream, data|
    puts "[#{ch[:host]} : #{stream}] #{data}"
  end

  # Tell Net::SSH to wait for output from the SSH server
  session.loop  
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top