Tengo una función bash en uno de nuestros servidores de prueba que implementa nuestro código, pero uno de los comandos falla con frecuencia y no podemos encontrar la causa. Solo reintentamos hasta que funcione.
Quiero que la función vuelva a intentarlo si falla ese comando. En la función, hice algo como esto:
command_to_run || { echo "failed, retrying"; call_function; }
Lo que vuelve a llamar a la función como quisiera, pero también permite que la función continúe su ejecución. ¿Cómo detengo la ejecución de la función actual antes de volver a llamarla?
Pruebe un bucle while:
Bash guarda el estado de salida del último comando en la variable especial
$?
. El bucle anterior guarda el estado de salida decommand_to_run
como$er
y luego vuelve a ejecutar el comando hasta que un estado de salida de0
(Salido correctamente) se devuelve. Se esperará un segundo entre ejecuciones como lo sugiere Flup en los comentarios a continuación.fuente
sleep
allí para evitar un bucle estrecho.Encuentro
until
Es más legible en este caso.fuente