Tengo el siguiente escenario como:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
bash
shell-script
Rocky86
fuente
fuente

Respuestas:
Hay muchas formas de hacer este ciclo.
Con
ksh93sintaxis (también compatible conzshybash):Para cualquier shell similar a POSIX:
Ambos bucles duermen 10 segundos en cada iteración antes de probar nuevamente la existencia del archivo.
Después de que el ciclo haya finalizado, tendrá que probar la existencia del archivo por última vez para determinar si el ciclo se cerró debido a que se ejecutó 10 veces o debido a la aparición del archivo.
Si lo desea, y si tiene acceso a las herramientas de inotify, puede reemplazar la
sleep 10llamada conEsto esperaría a que ocurra un evento de creación de archivo en el directorio actual, pero se agotaría el tiempo de espera después de 10 segundos. De esta manera, su bucle se cerrará tan pronto como aparezca el nombre de archivo dado (si apareciera).
El código completo, con
inotifywait(reemplace consleep 10si no quiere eso), puede verse comofuente
inotifywaitcomo reemplazo directosleep.Si el recuento no es una variable, puede usar la expansión de llaves:
Si el recuento es una variable, puede usar el
seqcomando:fuente
$(seq $count)aunque
test -e file && exites más flexiblefuente
exists1o similar , todavía imprime un montón de errores si / cuando no se encuentra un archivo coincidente. (También se produce un error si hay varias coincidencias.) Cualquier otro shell que probé parece dar errores en cualquier caso ...done 2<>/dev/null. hacebasheso guionizado? Pensé que solo se-idesvanecía en un contexto interactivo. aún así,exists?es tanto como un nombre de relleno comofile. Pero sí, odio citando en redirecciones - si los tornillos de manera mucho más arriba.test -e.