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.