如何与意外互动?期望

时间:2018-03-30 13:35:37

标签: bash expect

我试图让脚本获得自动化。 我的示例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"。

1 个答案:

答案 0 :(得分:0)

那是因为您自己输入了 interact(没有任何模式匹配选项)。

为了将“是”或“否”解释为一种模式,您需要用额外的大括号对括住 interact

-re "(.*)\[\r\n]"   { interact  {
                       "yes" { send -- "yes\n"; exp_continue }
                       "no"  { send -- "no\n"; exp_continue }
                    } }