首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Expect不识别循环中的“超时”命令

Expect不识别循环中的“超时”命令
EN

Stack Overflow用户
提问于 2018-06-25 02:24:09
回答 1查看 163关注 0票数 0

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

我的剧本

代码语言:javascript
复制
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"

无论如何,expect总是不会读取超时,日志如下所示

代码语言:javascript
复制
 expect: does"\r\n\u001b[r\u001b[m\u001b[2J\u001b[H\u001b[?7h\u001b[?1;4;6l
 \u001b[?1049h\u001b[4l\u001b[?1h\u001b=\u001b[0m\u001b(B\u001b[1;70r\u001b[H
 \u001b[2J\u001b[H\u001b[2J"(spawn_id exp5) match glob pattern "poplar login"? no
 "root@poplar"? no 
 " send "\r" ; exp_continue "? no
 expect: timed out
 login success! 
 send: sending "reboot\r" to { exp5 }

请协助,谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 03:09:00

变化

代码语言:javascript
复制
"root@poplar"
timeout { send "\r" ; exp_continue }

代码语言:javascript
复制
"root@poplar" {}
timeout { send "\r" ; exp_continue }

否则它会被当作

代码语言:javascript
复制
"root@poplar" timeout
{ send "\r" ; exp_continue }

这就是您看到调试消息的原因。

代码语言:javascript
复制
" send "\r" ; exp_continue "? no

因为部件{ send "\r" ; exp_continue }是作为模式处理的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51015562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档