¿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.
nohup
permitirte ejecutar un comando en segundo plano&
y;
son "terminadores de comando". No necesita usar ambos:for ...; do wait $arg & done
funcionará.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
wait
comando 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
seq
no 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 &)
,cmd
será 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, porquewait
es 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