Respuestas:
Podrías usarlo some_command
como tu condición de prueba.
while ! some_command; do sleep 1; done
La condición seguirá siendo válida siempre que some_command
salga con un error.
O una forma más detallada si desea hacer verificaciones adicionales:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Para esto es el until
ciclo:
until some_command
do sleep 1
done
Es la negación lógica de un while
bucle.
until
bucleEl until
bucle deberá ejecutar continuamente una lista compuesta siempre que otra lista compuesta tenga un estado de salida distinto de cero.
El formato del bucle hasta es el siguiente:
hasta compuesto-lista-1 hacer compuesto-lista-2 hecho
until
complete el mandato. De lo contrario, se debe ejecutar el compuesto-lista-2 y el proceso se repite.Solo puedes hacer:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
esto tiene la desventaja de que siempre duerme un segundo primero
Si desea poder salir de cualquiera de una serie de comandos para salir con 0, puede hacer:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
que por supuesto también funciona solo some_command
[
y ]
alrededor de los comandos.
Ni while ! ...
tampoco until ...
trabajos sobre los sistemas que congelaron su entorno de shell antes de la POSIX.1-2001. Esto, sin embargo, lo hace.
while :; do
if some command; then
break
fi
sleep 1
done
Si no necesita portabilidad total, ¿por qué está escribiendo un script de shell? Es más probable que Perl esté disponible que Bash.
sleep 1 while 0 != system qw(some command);
(Como se indicó anteriormente, sleep
solo se ejecuta si el comando falla).