我正在使用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
是什么意思?
答案 0 :(得分:1)
您必须使用exp_continue
在expect
中包含可选字符串才能等待它。上面的脚本可以修改为
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
用法中有一些退出条件。否则,如果在时间限制内没有看到任何人,显然会发生超时。