Isso inicia os dois processos, aguarda o primeiro que termina e depois mata o outro:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
Como funciona
-
Iniciar:
{ cd ./frontend && gulp serve; } & { cd ./backend && gulp serve --verbose; } &
Os dois comandos acima iniciam os dois processos em segundo plano.
-
Espere
wait -n
Isso aguarda a conclusão de qualquer trabalho em segundo plano.
Por causa da opção
-n
, isso requer o bash 4.3 ou melhor. -
Mate
pkill -P $$
Isso mata qualquer trabalho para o qual o processo atual é o pai. Em outras palavras, isso elimina qualquer processo em segundo plano que ainda esteja em execução.
Se o seu sistema não tiver
pkill
, tente substituir esta linha por:kill 0
que também mata o grupo de processos atual .
Exemplo facilmente testável
Ao alterar o script, podemos testá-lo mesmo sem o gulp
instalado:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
O script acima pode ser executado como bash script.sh 1 3
e o primeiro processo termina primeiro. Alternativamente, pode-se executá-lo como bash script.sh 3 1
e o segundo processo terminará primeiro. Em qualquer caso, pode-se ver que isso funciona como desejado.