Aşağıdaki gibi senaryo var:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
Aşağıdaki gibi senaryo var:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
Yanıtlar:
Bu döngüyü yapmanın birçok yolu vardır.
İle ksh93sözdizimi (ayrıca desteklediği zshve bash):
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
sleep 10
done
POSIX benzeri herhangi bir kabuk için:
n=0
while [ "$n" -lt 10 ] && [ ! -e filename ]; do
n=$(( n + 1 ))
sleep 10
done
Her iki döngü de dosyanın varlığını test etmeden önce her yinelemede 10 saniye uyur.
Döngü bittikten sonra, döngünün 10 kez çalıştırılmasından veya dosyanın görünmesinden dolayı çıkıp çıkmadığını anlamak için dosyanın son varlığını test etmeniz gerekecektir.
İsterseniz ve inotify araçlarına erişiminiz varsa, sleep 10çağrıyı
inotifywait -q -t 10 -e create ./ >/dev/null
Bu, geçerli dizinde bir dosya oluşturma olayının gerçekleşmesini bekler, ancak 10 saniye sonra zaman aşımına uğrar. Bu yolla, verilen dosya adı görünür görünmez (görünürse) döngünüz çıkacaktır.
İle tam kod inotifywait( sleep 10bunu istemiyorsanız değiştirin ),
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
inotifywait -q -t 10 -e create ./ >/dev/null
done
if [ -e filename ]; then
echo 'file appeared!'
else
echo 'file did not turn up in time'
fi
inotifywaityerine bir yedek olarak kullanıyorum sleep.
Sayı bir değişken değilse küme ayracı genişletmeyi kullanabilirsiniz:
for i in {1..10} # you can also use {0..9}
do
whatever
done
Sayı bir değişkense şu seqkomutu kullanabilirsiniz :
count=10
for i in $(seq $count)
do
whatever
done
$(seq $count)
n=0
until [ "$((n+=1))" -gt 10 ]
do <exists? command exit
done
echo oh noes!
test -e file && exitdaha esnek olsa da
exists1eşleşen bir dosya bulunamazsa / bulunsa bile bir sürü hata yazdırır. (Ayrıca birden fazla eşleşme varsa hatalar.) Test ettiğim herhangi bir kabuk her durumda hata veriyor gibi görünüyor ...
done 2<>/dev/null. mu basho metne geliyor? bunu sadece etkili -iolmayan bir bağlamda etkilediğini düşündüm . Yine de, exists?dolgu adı kadar file. ama evet, yönlendirmelerden alıntı yapmaktan nefret ediyorum - eğer çok fazla vidalanırsa.
test -e.