关于expect脚本中超时的处理

      最近在修改一个问题的时候,需要满足这样一个诉求:上层脚本在调用expect脚本时,需要知道expect执行是否超时;

      首先expect脚本超时时,自己是不会报错或者返回非0值的,这就需要人为的在判断timeout,关于expect脚本中timeout的使用具体可以百度去;在使用timeout判断时发现一个问题,即:像下图这样加一个expect timeout的关键字,诚然,超时时会以127退出,但是在正常执行完tar命令的时候也会等完超时时间,然后以127退出

set timeout 3600
send "cd ${PAAS_DIR} \r"
send "tar -czf  ${PAAS_DIR}/backup_swr_`date +%Y%m%d%H%M%S`.tar.gz  ${SWR_PATH} \r"
expect {
        timeout {exit 127 }
}

        在网上搜索解决方法未果,也试过在expect中加 eof {exit 0} 、 "*$"{exit 0}都不行,然后自己换了个思路,解决办法很简单,在判断timeout前加一个退出,即

set timeout 3600
send "cd ${PAAS_DIR} \r"
send "tar -czf  ${PAAS_DIR}/backup_swr_`date +%Y%m%d%H%M%S`.tar.gz  ${SWR_PATH} \r"
send "exit \r"
expect {
        timeout {exit 127 }
}
       这样当3600秒内执行完压缩命令后,会自动退出expect脚本,需要注意的是这样 退出的返回值会是1 ,而不是0;当未执行完压缩命令,则会捕捉到timeout然后以127退出;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值