我试图让脚本获得自动化。
我的示例script.sh
:
#!/bin/bash
echo "Would you like tea ?"
read answer
echo $answer
echo "Would you like cup ?"
read answer
echo $answer
echo "Would you like cake ?"
read answer
echo $answer
echo "Would you like car ?"
read answer
echo $answer
我想回答我所期望的问题,并与我没有预料到的用户互动。 在我的例子中,我知道我会期待关于茶和汽车的问题。另外两个是意外的,需要与用户进行交互。
有我的script.exp:
#!/usr/bin/expect -f
set timeout -1
spawn ./script.sh
match_max 100000
while true {
expect {
"tea" {send -- "yes\r" ; exp_continue }
"car" {send -- "no\r" ; exp_continue }
-re "(.*)\[\r\n]" interact {
"yes" { send -- "yes\n"; exp_continue }
"no" { send -- "no\n"; exp_continue }
}
}
exp_continue
}
}
expect eof
但是一旦我开始互动,我就无法离开。 我试过"休息"但它走到了尽头。 我不止一次阅读Expect的手册,但无法找到解决方案。
你能帮帮我解决这个问题吗?
要了解这一情况,我需要尽快升级200多个虚拟机(debian 7到9)。我试图通过响应apt-get upgrade命令来减轻操作压力。不能使用--force-yes因为某些答案需要" no"。
答案 0 :(得分:0)
那是因为您自己输入了 interact
(没有任何模式匹配选项)。
为了将“是”或“否”解释为一种模式,您需要用额外的大括号对括住 interact
:
-re "(.*)\[\r\n]" { interact {
"yes" { send -- "yes\n"; exp_continue }
"no" { send -- "no\n"; exp_continue }
} }