我有一个脚本等待60秒内的值
getotp.sh
for i in {1..60}; do
OTP=$(curl http://somewhere/somefile)
[ ! -z "$OTP" ] && echo $OTP && exit
sleep 1
done
我有一个期望脚本,该脚本调用shellscript输入OTP值。
spawn -ignore HUP start_vpn
set OTP [ exec getotp.sh ]
expect "Password:" { send \$OTP\r }
expect "Connected." { expect_background }
start_vpn代表一个连接器,它将向我发送一个OTP邮件给我,我想抓住(解决)该邮件并自动提示到生成的界面。
这里的问题是,getotp.sh将需要等待一段不确定的时间(可能是10到60秒),直到电子邮件到达并转换为OTP值。但 在我的期望脚本中,该行永不等待:
set OTP [ exec getotp.sh ]
它永远不会等待,并且$ OTP始终是一个空值,立即提示您输入“密码:”。
如何使Expect脚本等待getotp.sh的执行直到获取适当的值?