¿Cómo es posible ejecutar múltiples comandos y ponerlos en segundo plano usando bash?
Por ejemplo:
$ for i in {1..10}; do wait file$i &; done
donde wait es un binario personalizado.
En este momento me sale un error:
syntax error near unexpected token `;'
cuando ejecuta el comando anterior.
Una vez en segundo plano, los comandos deben ejecutarse en paralelo.

nohuppermitirte ejecutar un comando en segundo plano&y;son "terminadores de comando". No necesita usar ambos:for ...; do wait $arg & donefuncionará.Respuestas:
El
&, al igual que;es un operador terminador de lista . Tienen la misma sintaxis y se pueden usar indistintamente (dependiendo de lo que quieras hacer). Esto significa que no quieres, o necesitascommand1 &; command2, todo lo que necesitas escommand1 & command2.Entonces, en tu ejemplo, podrías escribir:
y cada
waitcomando se iniciará en segundo plano y el bucle pasará inmediatamente al siguiente.fuente
En aras de la compatibilidad, utilice la forma posix en lugar de la expansión:
fuente
seqno es un comando POSIX y generalmente solo se encuentra en sistemas GNU. El comportamiento o$(...)(y$i) depende del valor actual de$IFS. También tenga en cuenta que al hacerlo(cmd &),cmdserá hijo de una subshell, por lo que no podrá esperar y obtener su estado de salida, por ejemplo.Puede agrupar los comandos y poner los comandos agrupados en segundo plano. Me gusta :
fuente
¿Su binario se llama realmente
wait? No recomiendo hacerlo, porquewaites una concha incorporada.Creo que bash no analiza bien un bucle de una línea que inicia procesos en segundo plano. Le sugiero que cambie el código a:
fuente