如何在 Ruby 期望脚本中使用条件

How to use a conditional within a Ruby expect script

我在 Ruby 中使用 expect,但对于如何根据我登录的设备的行为来分支我的代码,我有点迷茫。如果我在 > 下面得到正确的提示,我怎么能说 foo.run 但是如果我没有得到 运行 foo.fail 呢?更进一步,我如何评估在输入密码和收到 > 提示之间返回的所有文本?有没有办法查看设备以某种方式打印的所有文本?

   def device_test(password)
      $expect_verbose = true
      PTY.spawn("ssh my-router") do |reader, writer, pid|
         reader.expect("password:")
         writer.puts(password)
         reader.expect(">")        
         puts "logged in"
         sleep(15)
      end
   end

似乎 expect 方法只能查找单个模式(不像 Tcl expect 库,您可以同时查找多个模式)。

看来您必须传递 "timeout" 参数并检查 return 值:

if reader.expect(">", 2)
  puts "foo.run"
else
  # did not see ">" within 2 seconds
  puts "foo.fail
end