0

我正在使用 Ruby,我有以下代码用于 ssh-ing 到路由器并运行一系列存储在数组中的命令:

result = PTY.open do |masterIO, slaveFile|
    r, w = IO.pipe

    slaveFile.raw!    
    pid = spawn(sshCommand, :in=>r, :out=>slaveFile)
    r.close; slaveFile.close;

    output = ""
    @commands.each do |subCommand|
        w.puts subCommand
        masterIO.each_line { |line| output += line }
    end
    next ouput
end

我的问题是masterIO.each_line { ... }永远挂起。在上面的代码中,我想我需要关闭w,但我仍然不确定如何编写它以使其表现得像我想要的那样。

注意:您必须记住 subCommands 不是即时的,所以我需要某种方式等到第一个命令执行完毕后再编写第二个命令。

编辑 :

我想我可以在每个命令之间用'&&'连接所有命令。这将允许我按顺序运行它们,但我仍然不确定如何使读取这些命令的输出成功

4

1 回答 1

0

为什么你不能使用 net/ssh 库?

require 'net/ssh'

Net::SSH.start('ip', 'user', password: 'your_password') do |ssh|
  @commands.each {|command| ssh.exec(command)}
end
于 2013-10-30T13:09:15.947 回答