Ejecute un script muy lento hasta que tenga éxito.

Ejecute un script muy lento hasta que tenga éxito.

Mi script fetch_remote_work.shes bastante lento porque se conecta a una red. Necesito ejecutarlo muchas veces hasta que funcione.

./fetch_remote_work.sh

while [ $? -ne 0 ]
do
    ./fetch_remote_work.sh
done

Obviamente esto funciona bien. Sin embargo, no me gusta verme obligado a llamar al primero ./fetch_remote_work.sh. Sé que en otros idiomas como, hay unhacer mientrasbucle que ejecuta al menos la primera iteración. Que estaría muy limpio si existiera en

Entonces mi pregunta es: ¿existe una forma más limpia que la que hice?

Respuesta1

Utilice el comando en sí como condicional para la whileconstrucción.

while ! ./fetch_remote_work.sh; do :; done

Respuesta2

Si quieres ejecutar algohastatiene un código de retorno cero,

until [ $RANDOM -eq 42 ]
do 
  echo looking for the answer to life, the universe, and everything
done

(o como una sola línea)

until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done

Para tu ejemplo:

until ./fetch_remote_work.sh; do :; done

Este bucle no hace "nada" (ejecuta el:incorporado)hastael script fetch_remote_work.sh devuelve 0.

Respuesta3

Cambie la primera línea a false, forzando la condición deseable para la primera iteración.

información relacionada