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_commanddos 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; donePara esto es el
untilciclo:Es la negación lógica de un
whilebucle.La especificación dice:
El
untilbucleEl
untilbucle 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 hechountilcomplete 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_commandfuente
[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,
sleepsolo se ejecuta si el comando falla).fuente