在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}'
对我来说毫无意义。在通用中,任何时候对awk
、sed
和/或grep
的多个简单调用都是流水线式的,这让我认为它们中的大多数都可以被消除。