Esto inicia ambos procesos, espera el primero que finaliza y luego mata al otro:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
Cómo funciona
Comienzo:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
Los dos comandos anteriores inician ambos procesos en segundo plano.
Espere
wait -n
Esto espera a que finalice cualquiera de los trabajos en segundo plano.
Debido a la -n
opción, esto requiere bash 4.3 o superior.
Matar
pkill -P $$
Esto mata cualquier trabajo para el cual el proceso actual es el padre. En otras palabras, esto mata cualquier proceso en segundo plano que todavía se está ejecutando.
Si su sistema no tiene pkill
, intente reemplazar esta línea con:
kill 0
que también mata al grupo de proceso actual .
Ejemplo fácilmente comprobable
Al cambiar el script, podemos probarlo incluso sin tener gulp
instalado:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
El script anterior se puede ejecutar como bash script.sh 1 3
y el primer proceso termina primero. Alternativamente, uno puede ejecutarlo como bash script.sh 3 1
y el segundo proceso terminará primero. En cualquier caso, se puede ver que esto funciona como se desea.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?