我正在运行一个应用程序,它会提示用户输入大约十几次密码:-( 我尝试使用expect绕过这个问题,并让它在自动模式下运行,但我无法克服多次密码的问题,这不是完全静态的。有时它要求4-5次,有时要求9-10次。
对于这个问题,有没有比我下面给出的更好的解决方案:
spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
" password: $" send "$password\r"
"^Rollout Done "
"^Rollout Updated "
}
通过上述解决方案,我只能捕获密码两次,然后在其余时间手动开始输入,是否可以使用密码进行循环?
答案 0 :(得分:3)
查找exp_continue命令 - 它会阻止当前[expect]
命令返回,因此它可以找到任何后续密码提示。
spawn myApp [lindex $argv 0]
expect {
-re { password: $} {
send "$password\r"
exp_continue
}
-re {^Rollout (?:Done|Updated) }
}
如果您希望用户输入密码,而不是将其以纯文本形式存储在脚本中,请参阅How can I make an expect script prompt for a password?
答案 1 :(得分:0)
Expect可以使用循环 - 它只是TCL,我相信一些额外的命令。所以就这样做
set found 0
while {$found < 1}
{
expect {
" password: $" send "$password\r"
"^Rollout Done " set found 1
"^Rollout Updated " set found 1
}
}