1
为什么这个期望的脚本不断产生ssh命令,从不打印“进入睡眠”或者“离开睡眠”,并且从不睡觉?为什么不这样期待句柄超时或者eof
我的意图是尝试ssh'ing,如果它看到“password:”以退出while循环(更多代码在这里看不到会包含交互)。如果3秒钟过去,或ssh在此之前死亡,它会应该放3秒睡,再放,然后再试ssh。
主机名“doesntexist”用于强制失败,例如名称或服务未知。
#!/usr/bin/expect -f
set readyForPassword 0
while { $readyForPassword == 0 } {
spawn ssh [email protected]
expect -timeout 3 {
"password: " {
set readyForPassword 1
} timeout {
puts "going to sleep"
sleep 3
puts "out of sleep"
} eof {
puts "going to sleep"
sleep 3
puts "out of sleep"
}
}
}
呵呵。如果我删除了{在期望行结束时(及其底部附近的大括号)并使期望行为'expect -timeout 3“密码:”{“然后它按预期工作。探索Expect说,你可以按照我原来的方式来支撑它,至少在p76我想。期望改变吗?我误解别的东西了吗? – user1902689