bash 内置的 break 确实允许您完成您正在做的事情,只需使用负值和 $? 返回的状态中断即可。将是 1:
while true
do
if [ -f "./test" ] ; then
break -1
fi
done
echo $? ## You'll get 1 here..
请注意,这记录在内置 break 的帮助中:
help break
break: break [n] 退出 for、while 或 until 循环。
退出 FOR、WHILE 或 UNTIL 循环。如果指定了 N,则中断 N 个封闭循环。
退出状态:退出状态为 0,除非 N 不大于或等于 1。
您可以跳出 n 次循环或发送一个负值以进行非零返回,即 1
我同意@hagello 作为睡眠和改变循环的一种选择:
#!/bin/bash
timeout=120
waittime=0
sleepinterval=3
until [[ -f "./test" || ($waittime -eq $timeout) ]]
do
$(sleep $sleepinterval)
waittime=$((waittime + sleepinterval))
echo "waittime is $waittime"
done
if [ $waittime -lt $sleepinterval ]; then
echo "file already exists"
elif [ $waittime -lt $timeout ]; then
echo "waited between $((waittime-3)) and $waittime seconds for this to finish..."
else
echo "operation timed out..."
fi