直到循环,但如果在5分钟后失败,如何超时



在bash:之前我有这个2

until grep "1" /var/tmp/machineip > /dev/null;
do
nova list --name spawningtestwin|grep spawningtestwin|awk -F= '{print $2}'|awk '{print $1}'|sed 's/ //g' > /var/tmp/machineip
done
mip=$(cat /var/tmp/machineip)
until ping -c1 $mip &>/dev/null; do :; done

如何将截止时间限制为5分钟?如果它在5分钟内没有得到任何东西,它应该停止。

TIMEOUT=0;直到ping-c1$mip&>/dev/null||test"$TIMEOUT"-gt"$((5*60((";do:;睡眠1;TIMEOUT=$((TIMEOUT+1((;完成

你可以把5改成你喜欢的分钟数。

timeout可能是一个不错的选择,但由于您正在尝试运行循环,它可能需要比您想要的更多的语法。如果你喜欢的话,我相信我们可以举一个例子。

如果你想用老式的方式。。。

declare -i now start=$(date +%s) # linux epoch timestamp in seconds
timeout=300                      # 300s = 5m
until grep -q "1" /var/tmp/machineip 
do now=$(date +%s)               # linux epoch timestamp in seconds
if (( ( now - start ) < timeout )) # less than 5m
then nova list --name spawningtestwin |
awk -F= '/spawningtestwin/ {
gsub(/ +//,"",$2);
print $2
}'                             > /var/tmp/machineip
sleep 20
else echo taking too much time.
exit 1
fi
done 

awk不是我的堡垒。你们帮我查一下。。。

特别是,awk -F= '{print $2}'|awk '{print $1}'对我来说毫无意义。在通用中,任何时候对awksed和/或grep的多个简单调用都是流水线式的,这让我认为它们中的大多数都可以被消除。

最新更新