Expect在循环中无法识别命令“超时”

时间:2018-06-25 02:24:09

标签: expect

我有一个期望脚本来检查登录状态,如果显示database脚本的控制台将发送用户名(无密码)并等待180秒以准备系统。 系统就绪后,将检查控制台是否显示"poplar login",,如果是,它将中断并发送"root@poplar"消息。如果没有,则期望会超时并返回到success

我的脚本

"poplar login"

以某种方式总是无法按预期读取超时,并且日志类似于Follow

set timeout 2 
expect {
            "poplar login" {
               send "root\r";
               sleep 180; send "\r" ;
               send "\r" ;
               exp_continue
            }
            "root@poplar"
            timeout { send "\r" ; exp_continue }
} 

send_user "login success!\n"

请协助,谢谢

1 个答案:

答案 0 :(得分:1)

更改

"root@poplar"
timeout { send "\r" ; exp_continue }

"root@poplar" {}
timeout { send "\r" ; exp_continue }

否则将被处理为

"root@poplar" timeout
{ send "\r" ; exp_continue }

这就是为什么您看到调试消息的原因

" send "\r" ; exp_continue "? no

因为部分{ send "\r" ; exp_continue }被当作模式来处理。