Trabajo en segundo plano en bucle


81

Intento ejecutar un trabajo en segundo plano en un bucle for en bash:

for i in $(seq 3); do echo $i ; sleep 2 & ; done

Me sale un error:

bash: syntax error near unexpected token `;'

En zsh, la línea de comandos funciona.


3
¿Qué parte intentas colocar en segundo plano? como dice, estás tratando de dormir en segundo plano, lo que no tendría sentido ..
— BugFinder

4
dormir es solo para probar mi bucle antes del caso real.
— bougui

Respuestas:


123

Eliminar el ; después de dormir

for i in $(seq 3); do echo $i ; sleep 2 & done

Por cierto, estos bucles se escriben mejor en líneas separadas con la sangría adecuada (si está escribiendo esto en un archivo de script de shell).

for i in $(seq 3)
do
   echo $i
   sleep 2 &
done

4
Tenga en cuenta que enviará "sleep 2" solo al fondo.
— tamerlaha

¿Por qué cuando hago esto con $iel comando en segundo plano, el control de trabajo dice que el nombre del proceso contiene en $ilugar de lo que sea el valor real de $iera?
— Michael

@Michael El programa completo con salida ayudaría a comprender mejor
— gammay

for I in <whatever>; do rm -fr $I & done... jobs-> rm -fr $Ivarias veces, en lugar de eliminar el directorio real para cada trabajo
— Michael

Tengo respuesta para esto, es largo. Así que creo que debería publicarlo como una nueva pregunta (y agregar el enlace de la pregunta aquí), responderé y también obtendrá más respuestas.
— gammay

42

Puede poner el comando de fondo en ()

for i in $(seq 3); do echo $i ; (sleep 2 &) ; done

9
Tenga en cuenta: crea una subcapa con eso. También significa que no podrá waitfinalizar los trabajos en segundo plano.
— JFK
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.