Tengo problemas para encontrar la combinación correcta de punto y coma y / o llaves. Me gustaría hacer esto, pero como una línea desde la línea de comandos:
while [ 1 ]
do
foo
sleep 2
done
bash
loops
while-loop
Brian Deacon
fuente
fuente
Respuestas:
Por cierto, si lo escribe como una línea múltiple (como se muestra) en el símbolo del sistema y luego llama al historial con la flecha hacia arriba, lo obtendrá en una sola línea, puntuada correctamente.
fuente
cmdhist
opción si está usando bash?while true; do sh /Users/myuser/bin/vpn ; done
También es posible usar el comando dormir en la condición de while. Hacer que una línea se vea más limpia en mi humilde opinión.
fuente
while echo thinking ; do sleep 2 ; done
Por supuesto, si el comando [while] falla, el ciclo se cierra, por lo que tendría que hacerlo,while echo thinking || true ; do sleep 2 ; done
pero luego volverá awhile true ; ...
Colón siempre es "verdadero":
fuente
: [arguments]
Sin efecto; el comando no hace nada más que expandir argumentos y realizar cualquier redirección especificada. Se devuelve un código de salida cero.Puede usar punto y coma para separar las declaraciones:
fuente
También puede hacer uso del
until
comando:Tenga en cuenta que, en contraste con
while
,until
ejecutaría los comandos dentro del bucle siempre que la condición de prueba tenga un estado de salida que no sea cero.Usando un
while
bucle:Usando un
for
bucle:Otra forma de usar
until
:fuente
until ((0)); do foo; sleep 2; done
no parece funcionar. Es continuo infinito.Un bucle infinito muy simple .. :)
Fr su pregunta sería:
fuente
Me gusta usar los puntos y comas solo para la instrucción WHILE, y el operador && para hacer que el ciclo haga más de una cosa ...
Así que siempre lo hago así
fuente
&&
in the loop es el mismo que en cualquier otro momento, ¿verdad? ¿Necesita la segunda cosa que suceda sólo si el primer pase, a continuación, utilizar&&
lo demás;
es suficiente. Realmente, desea mantener el contenido de ese ciclo corto y simple, idealmente solo un comando, una función o un script.Para ver el proceso simple, use
watch
en su lugarfuente
Utilizando
while
:Usando
for
Loop:Usar
Recursion
, (un poco diferente al anterior, la interrupción del teclado no lo detendrá)fuente
Si desea que el ciclo while se detenga después de alguna condición, y su
foo
comando devuelve un valor distinto de cero cuando se cumple esta condición, puede hacer que el ciclo se rompa así:Por ejemplo, si el
foo
comando está eliminando cosas en lotes, y devuelve 1 cuando no queda nada para eliminar.Esto funciona bien si tiene un script personalizado que necesita ejecutar un comando muchas veces hasta que se presente alguna condición. Usted escribe el script para salir
1
cuando se cumple la condición y salir0
cuando se debe ejecutar nuevamente.Por ejemplo, supongamos que tiene un script de Python
batch_update.py
que actualiza 100 filas en una base de datos y devuelve0
si hay más para actualizar y1
si no hay más. El siguiente comando le permitirá actualizar las filas 100 a la vez con dormir durante 5 segundos entre actualizaciones:fuente
foo
comando salga con código1
cuando desea que se rompa el bucle while. He actualizado mi respuesta con un ejemplo.Si puedo dar dos ejemplos prácticos (con un poco de "emoción").
Esto escribe el nombre de todos los archivos terminados con ".jpg" en la carpeta "img":
Esto los elimina:
Solo trato de contribuir.
fuente
ls -1 *.jpg
yrm *.jpg
También puede probar esto ADVERTENCIA: esto no debe hacerlo, pero dado que la pregunta es un bucle infinito sin fin ... así es como podría hacerlo.
fuente