Risposte:
È possibile utilizzare some_command
come condizione di prova.
while ! some_command; do sleep 1; done
La condizione rimarrà vera fino a quando some_command
esce con un errore.
O un modo più dettagliato se vuoi fare ulteriori controlli:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Ecco a cosa serve il until
loop:
until some_command
do sleep 1
done
È la negazione logica di un while
ciclo.
until
LoopIl until
loop deve eseguire continuamente un elenco composto purché un altro elenco composto abbia uno stato di uscita diverso da zero.
Il formato del ciclo until è il seguente:
fino a compound-list-1 fare compound-list-2 fatto
until
comando viene completato. Altrimenti, l' elenco composto-2 deve essere eseguito e il processo si ripete.Puoi semplicemente fare:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
questo ha lo svantaggio però che dorme sempre prima un secondo
Se vuoi essere in grado di uscire da uno qualsiasi dei vari comandi per uscire con 0 puoi fare:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
che ovviamente funziona anche per giusto some_command
[
e ]
attorno ai comandi.
Né while ! ...
né until ...
opere sui sistemi che congelava loro ambiente shell prima POSIX.1-2001. Questo, tuttavia, lo fa.
while :; do
if some command; then
break
fi
sleep 1
done
Se non hai bisogno di portabilità totale, perché stai scrivendo uno script di shell? È più probabile che Perl sia disponibile rispetto a Bash.
sleep 1 while 0 != system qw(some command);
(Come sopra, sleep
viene eseguito solo se il comando non riesce.)