Supongamos que tengo cinco .shscripts Bash ( ) en una carpeta ( my_folder), y se nombran de la siguiente manera:
script_1.sh
script_2.sh
script_3.sh
script_4.sh
script_5.sh
¿Cómo puedo escribir una sexta secuencia de comandos Bash o solo una línea que comenzará a ejecutar todas estas secuencias de comandos juntas?
Necesito los cinco scripts para comenzar a ejecutarse todos juntos al mismo tiempo y no uno tras otro.

Respuestas:
GNU
paralleles perfecto para este tipo de cosas. Instalar consudo apt install parallely luego:Los
-jcontroles cuántos procesos t correr en paralelo, y-j0significa "todos ellos". Ajústelo a otro valor (p-j20. Ej. ) Para ejecutar los scripts en lotes.fuente
parallelcomando delmoreutilspaquete. El ejemplo de uso:parallel -j 20 -- my_folder/*.sh(A diferencia de GNUparallel,-j0ejecutaría los scripts de uno en uno).sudo apt install parallelreemplazará el archivo/usr/bin/parallelcon el de GNU paralelo. Entonces, siempre que lo instale, como sugiere mi respuesta, debería funcionar como se esperaba.parallelcomandos del manual mientras escribía mi respuesta para sugerir GNU en paralelo.Para ejecutar todos los scripts al mismo tiempo (en paralelo) use:
Para ejecutar el uno después del otro (secuencialmente) use:
Mejora para comentarios
Si tiene 200 scripts que desea ejecutar al mismo tiempo (lo que podría atascar la máquina, por cierto) use este script:
Establezca los atributos del script en ejecutable con el comando:
La primera vez que ejecute el script, solo hará eco de los nombres de los 200 scripts que ejecutará. Cuando esté contento de haber seleccionado los nombres correctos, edite el script y cambie esta línea:
a:
Hay tres formas en que puede llamar a un script bash desde otro como se responde aquí:
En el caso de OP, uno o más de los 200 scripts no contenían la
#!/bin/bashprimera línea shebang en el archivo. Como tal, la opción 3. tuvo que ser utilizada.200 secuencias de comandos que se ejecutan al mismo tiempo
Se ha planteado un comentario sobre si están "ejecutándose al mismo tiempo". En un sistema típico de 8 CPU, 25 scripts compartirán una CPU al mismo tiempo, pero solo se ejecutará un script a la vez hasta que se agote el tiempo (medido en milisegundos). Luego, el próximo trabajo recibirá su parte justa de milisegundos, luego el siguiente trabajo, etc., etc.
En términos generales, podemos decir que 200 trabajos se ejecutan "simultáneamente" pero no "simultáneamente" en 8 CPU, lo que equivale a 25 trabajos por CPU:
Imagen de arriba y comentarios a continuación del planificador del kernel de Linux
fuente
bashprefijo para llamar al script.Hay una herramienta para esto, lee
man run-parts.Por ejemplo, yo hago:
en mi script de copia de seguridad Palm Pilot.
${visorhome}/pbackup.d/:fuente
run-partsejecuta los scripts secuencialmente en lugar de todos a la vez como lo solicitó el OP. Sin embargo, tiene razón, es probable que ejecutar 200 scripts a la vez no tenga el mismo rendimiento que ejecutar 5, e incluso si ejecutarlos todos a la vez no causa ningún problema, aún puede ser innecesario. He comentado sugerir que el OP aclare sus preferencias a este respecto.run-partsno ejecutará los scripts (tienen un punto en el nombre:my_folder/*.shrun-partstiene requisitos de nombre de archivo muy específicos por alguna extraña razón. No lanzará nombres de archivo con extensiones, así que me temo que esto no funcionará aquí.Para ejecutar todos los
*.shscripts en elmy_folderdirectorio al mismo tiempo usandoxargs:Para limitar el número de scripts ejecutados simultáneamente a
10:fuente
lsun script. Usarfindes mucho más seguro. Es el primer elemento aquí: mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_.2A.mp3.29