Solía escribir mis guiones así:
some_command
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
Siempre me molestó que tuviera que escribir some_command
dos veces. ¿Puedo ponerlo dentro de la sección de prueba de bucle de alguna manera?
shell-script
Mihai
fuente
fuente
while ! some_command; do several; commands; sleep 1; done
Para esto es el
until
ciclo:Es la negación lógica de un
while
bucle.La especificación dice:
El
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:
until
complete el mandato. De lo contrario, se debe ejecutar el compuesto-lista-2 y el proceso se repite.fuente
Solo puedes hacer:
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:
que por supuesto también funciona solo
some_command
fuente
[
y]
alrededor de los comandos.Ni
while ! ...
tampocountil ...
trabajos sobre los sistemas que congelaron su entorno de shell antes de la POSIX.1-2001. Esto, sin embargo, lo hace.Si no necesita portabilidad total, ¿por qué está escribiendo un script de shell? Es más probable que Perl esté disponible que Bash.
(Como se indicó anteriormente,
sleep
solo se ejecuta si el comando falla).fuente