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
Começar:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
Os dois comandos acima iniciam os dois processos em segundo plano.
Esperar
wait -n
Isso aguarda o término do trabalho em segundo plano.
Por causa da -n
opção, 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 mata qualquer processo em segundo plano que ainda esteja em execução.
Se o seu sistema não possuir pkill
, tente substituir esta linha por:
kill 0
que também mata o grupo de processos atual .
Exemplo facilmente testável
Alterando o script, podemos testá-lo mesmo sem 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. Como alternativa, é possível executá-lo como bash script.sh 3 1
e o segundo processo será encerrado primeiro. Em ambos os casos, pode-se ver que isso funciona como desejado.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?