Existem várias maneiras de fazer esse loop.
Com a sintaxe ksh93
(também suportada por zsh
e bash
):
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
sleep 10
done
Para qualquer shell do tipo POSIX:
n=0
while [ "$n" -lt 10 ] && [ ! -e filename ]; do
n=$(( n + 1 ))
sleep 10
done
Ambos os loops dormem 10 segundos em cada iteração antes de testar a existência do arquivo novamente.
Após o término do loop, você terá que testar a existência do arquivo pela última vez para descobrir se o loop foi encerrado devido à execução 10 vezes ou devido ao aparecimento do arquivo.
Se desejar, e se você tiver acesso a inotify-tools, poderá substituir a chamada sleep 10
por
inotifywait -q -t 10 -e create ./ >/dev/null
Isso aguardaria a ocorrência de um evento de criação de arquivos no diretório atual, mas expiraria após 10 segundos. Dessa forma, seu loop sairia assim que o nome do arquivo aparecesse (se aparecesse).
O código completo, com inotifywait
(substitua por sleep 10
se você não quiser), pode parecer
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