脚本期望的正确方法是什么

时间:2018-05-29 19:02:46

标签: expect

非常期待和寻找关于这个的一些建议:

我正在尝试ssh到服务器并执行一些命令。

如果服务器是我第一次登录的服务器,它会提示我是否要信任它。我选择"是&#34 ;;这就是为什么我有第一个期望的原因 第二个期望是密码。

  1. 当我执行以下操作时,它接受第一个提示或第二个提示,因此这对我不起作用
  2. expect {
       "yes/no" {
          send "yes\n"
       }
       "assword: " {
          send "$mypass\n"
       }
    }
    
    1. 当我执行以下操作时,它可以工作,但在输入密码之前会等待很长时间。 我怀疑它等待"是/否"提示一段时间,不接收它然后继续
    2. expect "yes/no" {
            send "yes\n"
         }
      
      expect "assword: " {
            send "$mypass\n"
         }
      

      我想知道设置它的正确方法。

1 个答案:

答案 0 :(得分:1)

当您将其拆分为2个单独的命令时,您强制脚本首先查找"是/否"提示。它将等待$ timeout秒(默认为10秒)。只有这样才能找到密码提示。

您的第一个想法是正确的方法,但您缺少一个关键命令:

expect {
   "yes/no" {
      send "yes\r"
      exp_continue    ;# <== this
   }
   "assword: " {
      send "$mypass\r"
   }
}

exp_continue命令实质上强制执行流程保留在expect命令中,因此您仍然可以匹配密码提示。

一个小问题:惯用,使用\r(回车)作为&#34;点击Enter&#34;的字符。

要进一步学习,请查看标记以获取更多信息以及指向其他问题和答案的链接。