如何使期望等待执行直到输出结果

时间:2019-02-25 10:41:24

标签: bash expect

我有一个脚本等待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的执行直到获取适当的值?

0 个答案:

没有答案