我有一个expect脚本来检查登录状态,如果显示"poplar login",脚本的控制台将发送用户名(没有密码)并等待180年代系统就绪。一旦系统就绪,它将检查控制台是否显示"root@poplar",如果是,它将中断并发送success消息。如果没有,expect将超时并返回到"poplar login"
我的剧本
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总是不会读取超时,日志如下所示
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 }请协助,谢谢
发布于 2018-06-25 03:09:00
变化
"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 }是作为模式处理的。
https://stackoverflow.com/questions/51015562
复制相似问题