如果没有出现预期的字符串,如何继续?

时间:2014-11-18 09:52:11

标签: bash expect

我正在使用expect脚本来安装一些软件包。在此类安装过程中,有时会要求权限说Y/n来安装它们,有时则不会。

我在这里有两个问题:

1)如何照顾这两种情况?

#!/usr/bin/expect --
# This is for boto libraries installation
spawn apt-get install python-pip 
expect { 
    "Do you want to continue" 
        {   send "Y\r\n"  ## HERE SOMETIMES THIS STRING MAY NOT APPEAR
        }
}
interact
spawn pip install filechunkio 
interact
spawn pip install -U boto 
interact

当期望字符串没有出现时,它会抛出错误

spawn_id: spawn id exp6 not open
    while executing
"interact"
    (file "./botoInstall.exp" line 10)

第10行是第一次互动。

2)这里spawn_id: spawn id exp6 not open是什么意思?

1 个答案:

答案 0 :(得分:1)

您必须使用exp_continueexpect中包含可选字符串才能等待它。上面的脚本可以修改为

spawn apt-get install python-pip 

expect { 
    "Do you want to continue" {   send "Y\r\n"; exp_contine }
    #some other expect string along with 'exp_continue'
    timeout { puts "timeout happened" }
    eof { #some other action here# } 
}

如果expect看到这些字词,它会发送y\r\n,否则会继续检查其他字符串。

请记住在exp_continue用法中有一些退出条件。否则,如果在时间限制内没有看到任何人,显然会发生超时。

关于spawn id exp6 not open的查询,请查看herehere