He escrito una prueba difusa que falla de manera poco confiable. He agregado un código de depuración, pero ahora quiero ejecutar la prueba hasta que falle para poder reunir la salida de depuración.
He configurado la prueba para poder ejecutarla usando:
./runtest
Mi solución actual es escribir un untilfail
script:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
Entonces úsalo:
untilfail ./runtest
¿Hay una solución más simple?
Respuestas:
while
toma un comando para ejecutar, por lo que puede usar el más simpleEsto detendrá el ciclo cuando
./runtest
devuelva un código de salida distinto de cero (que generalmente es indicativo de falla).Sin embargo, para simplificar aún más su solución actual, solo debe cambiar su script de failfail para que se vea así:
Y luego puede llamarlo con cualquier comando que ya esté usando:
fuente
[
es un comando. Es un error común con los nuevos usuarios que[
es parte deif
ywhile
sintaxis.count=0
antes del bucle, luego, en lugar de:
en el bucle (un no-op), poner(( count++ ))
: esto incrementa el contador.say
y un altavoz que puede usarwhile ./runtest; do :; done && say test failed
para recibir una notificación si alguna vez se detienesay
es específico de macOS.Si no desea ajustar una tubería compleja en un script o función de shell, esto funciona:
La solicitud HTTP en este caso siempre devuelve 200 pero también devuelve algunos JSON que tienen un atributo "HasErrors": verdadero cuando hay un error.
fuente
Habiendo tenido un problema similar en un sistema que tenía la lógica de reintento de shell duplicada en todas partes, hice una herramienta dedicada para resolver esto llamada "reintento":
Un ejemplo más complejo:
Herramienta disponible en https://github.com/minfrin/retry .
fuente