我正在通过docker安装Windows应用程序,这需要一些用户输入(例如DB设置等)。我正在为这些用户输入使用Expect脚本来使我们的安装自动化。
但是在最后一步中,由于应用程序需要安装数据库架构和其他必需的元素,然后我提供的最终安装信息最多需要15-20分钟,然后提供最终输入以按Enter退出安装过程。
我该如何处理它,目前我只是在等待我的期望脚本,但是无论如何我还是要处理这个并使我的期望脚本等待特定的输入“字符串匹配”?
这是我的期望脚本的外观
#!/bin/bash
expect -c '
spawn sh ./setupapp.sh
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "PRESS <ENTER> TO CONTINUE:"
send "\r"
expect "Waiting here:"
send "\r"
expect "Waiting here:"
send "\r"
expect "Waiting here:"
send "\r"
expect "Waiting here:"
send "\r"
expect "Waiting here:"
send "\r"
expect "Waiting here:"
send "\r"
expect "PRESS <ENTER> TO Exit Installation:"
send "\r"
expect eof
'
我在这里使用Waiting(等待),以便等待10秒钟,有什么方法可以使我自动化并等待最后一个字符串。按Enter退出安装。
谢谢!
答案 0 :(得分:1)
看起来您想要这样的东西:这是期望某件事发生多次的最灵活的方式,我们不必在意确切发生多少次。>
expect -c '
set timeout 1200 ;# 20 minutes
spawn sh ./setupapp.sh
expect {
"PRESS <ENTER> TO CONTINUE:" {
send "\r"
exp_continue
}
"Waiting here:" {
send "\r"
exp_continue
}
timeout {
error "nothing happened after $timeout seconds"
}
"PRESS <ENTER> TO Exit Installation:" {
send "\r"
}
}
expect eof
'
期望命令等待四件事之一发生。对于第一个2,请按Enter键,然后继续等待其他事件。我添加了“超时”事件,以防您想在那里做一些特别的事情。
“按Enter退出”框不调用“ exp_continue”。发送回车符后,封闭的Expect命令结束,然后我们等待eof。