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 respuestasAntecedentes
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?