Ejecutando varios scripts en script bash paralelo

Tengo un script bash que contiene otros scripts dentro que se ejecutan en serie. Sin embargo, lleva una buena cantidad de tiempo ejecutarlos todos. ¿Hay alguna manera de ejecutar estos scripts en paralelo para mejorar el rendimiento general? Ellos son independientes el uno del otro.

Se ve similar a:

#!/bin/bash #some code here cppcheck.sh churn.sh run.sh 

Actualizar:

 **git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1]) if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt** sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html'; unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0; set ylabel 'Number of lines changed (total)'; set title 'Files with high churn level';set boxwidth 0.7; set style fill solid; set noborder; plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot echo "finished running churn.sh!" 

Este es el código dentro de churn.sh. El comando en negrita tarda 40 segundos en implementarse. Si en una secuencia de comandos principal puse ampersand después de churn.sh &, arroja un error que dice que sed no puede leer el archivo churn.txt (ya que aún no se ha creado). Parece que no espera hasta que la salida se guarde en un archivo. Inserté esperar después de ese comando, pero no ayuda.

Usar el & para ejecutarlo en el fondo hará el truco

 cppcheck.sh & churn.sh & run.sh & wait echo "All 3 complete" 

Lanzará un nuevo proceso para cada uno de ellos.

La wait bash también será útil como se indica en los comentarios, si tiene algo que ejecutar en el script principal, después de que estos tres terminen.

Sin un argumento, esperará a que se completen todos los procesos secundarios y luego reanudará la ejecución del script primario.


Los problemas que enfrenta parecen estar directamente relacionados con esto. Los conjuntos de variables solo son visibles para el subcuadro en el que están definidos . Por lo tanto, si ha especificado OUT_DIR en el script principal, no será visible para el script secundario cuando se abra. Lo correcto en este caso sería export la variable como una variable de entorno.