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 untilfailscript:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
Entonces úsalo:
untilfail ./runtest
¿Hay una solución más simple?

Respuestas:
whiletoma un comando para ejecutar, por lo que puede usar el más simpleEsto detendrá el ciclo cuando
./runtestdevuelva 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 deifywhilesintaxis.count=0antes del bucle, luego, en lugar de:en el bucle (un no-op), poner(( count++ )): esto incrementa el contador.sayy un altavoz que puede usarwhile ./runtest; do :; done && say test failedpara recibir una notificación si alguna vez se detienesayes 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