0

我正在运行一个应用程序,它提示输入用户密码大约十几次 :-( 我尝试使用 expect 来规避这个问题,并让它在自动模式下运行,但我无法克服多次的问题密码,这不是完全静态的。有时它会询问 4-5 次,有时会询问 9-10 次左右。

有没有比我在下面给出的更好的解决方案:

spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
  " password: $"    send "$password\r"
  "^Rollout Done "
  "^Rollout Updated "
}

通过上述解决方案,我只能捕获两次密码,然后在其余时间手动开始输入,密码是否可能出现循环?

4

2 回答 2

3

查找exp_continue命令——它会阻止当前[expect]命令返回,因此它可以找到任何后续的密码提示。

spawn myApp [lindex $argv 0]
expect {
    -re { password: $} {
        send "$password\r"
        exp_continue
    }
    -re {^Rollout (?:Done|Updated) }
}

如果您希望用户输入密码,而不是将其以纯文本形式存储在脚本中,请参阅如何使期望脚本提示输入密码?

于 2009-06-03T22:06:48.497 回答
0

Expect 可以使用循环——我相信它只是带有一些附加命令的 TCL。所以就这样做

set found 0
while {$found < 1}
{
expect {
 " password: $"    send "$password\r"
 "^Rollout Done "  set found 1
 "^Rollout Updated " set found 1
}
}
于 2009-06-03T18:32:17.570 回答