最近在修改一个问题的时候,需要满足这样一个诉求:上层脚本在调用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退出;