我正在使用expect脚本来调用installer.sh 对于整洁的安装,它工作正常。
但是当安装程序未能进行预检查时,发送顺序不同,我无法控制订单。
spawn ./Installer.sh
expect "change? (Y/N)"
send "Y\r"
expect "path"
send "$path\r"
expect "Enter selection"
send "1\r"
expect "path"
send "$path
exit 0
在第二个期望“路径”之后,安装程序在内部验证并继续执行步骤3并继续并完成。
但是,如果在第二个预期路径之后,安装程序预先检查失败然后它存在并提示最后一步,即再次路径。
当前退出后显示脚本并提示输入第4个时,它会继续发送第3个无关紧要的响应。脚本是否验证了匹配期望字符串?
Error :
"No Space. Exiting.
**Path: 1**
cp: cannot create regular file `1': Permission denied
send: spawn id exp5 not open
while executing
"send "path\r""
shell脚本因各种原因退出并提示上次发送。
有没有办法在会话进行时获取最后一条显示消息expect_out并读取它并继续基于它。
spawn shellscript
expect_1
send_1
expect_2
send_2
--sh stops and displays exiting...
if expect_out(buffer)=exiting
then
expect_4
send_4
else
expect_3
send_3
expect_4
send_4
exit
答案 0 :(得分:1)
您可能需要的关键是能够同时expect
几个不同的事物。幸运的是,这很容易做到。
expect {
"change? (Y/N)" {
# Something in here to respond to this case
# This bit is just code, but could be effectively empty too
}
"Exiting" {
# Now we've detected that the installer failed
send_user "oh no!\n"
exit 1
}
}
使用此表单时,您可以通过使用expect
完成处理程序脚本中的当前exp_continue
。像往常一样,你必须仔细考虑要匹配的实际模式。