Salga de un script bash si se produce un error en él o en cualquiera de los trabajos en segundo plano que crea [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo esperar en bash para que finalicen varios subprocesos y devolver el código de salida! = 0 cuando cualquier subproceso termina con el código! = 0? 27 respuestas

Antecedentes

Estoy trabajando en un script bash para automatizar el proceso de construcción de media docena de proyectos que viven en el mismo directorio. Cada proyecto tiene dos scripts para ejecutar para construirlo:

npm install
npm run build

La primera línea buscará todas las dependencias de npm. Como este paso lleva más tiempo, y dado que los proyectos pueden recuperar sus dependencias simultáneamente, estoy usando un trabajo en segundo plano para recuperar todo en paralelo. (es decir:npm install &)

La segunda línea usará esas dependencias para construir el proyecto. Como esto debe suceder después de que termine todo el Paso 1, estoy ejecutando elwait comando en el medio. Ver fragmento de código a continuación.

La pregunta

Me gustaría que mi script salga tan pronto como ocurra un error en cualquiera de los trabajos en segundo plano, onpm run build paso que sucede después.

Estoy usandoset -e, sin embargo, esto no se aplica a los trabajos en segundo plano y, por lo tanto, si un proyecto no puede instalar sus dependencias, todo lo demás continúa.

Aquí hay un ejemplo simplificado de cómo se ve mi script en este momento.

build.sh

set -e

DIR=$PWD

for dir in ./projects/**/
do
    echo -e "\033[4;32mInstalling $dir\033[0m"
    cd $dir
    npm install & # takes a while, so do this in parallel
    cd $DIR
done

wait # continue once the background jobs are completed

for dir in ./projects/**/
do
    cd $dir
    echo -e "\033[4;32mBuilding $dir\033[0m"
    npm run build # Some projects use other projects, so build them in series
    cd $DIR
    echo -e "\n"
done

Una vez más, no quiero seguir haciendo nada en el script si se produce un error en algún momento, esto se aplica tanto a los trabajos primarios como en segundo plano. es posible?

Respuestas a la pregunta(2)

Su respuesta a la pregunta