Це запускає обидва процеси, чекає першого, який закінчиться, а потім вбиває іншого:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
Як це працює
Початок:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
Вищеописані дві команди запускають обидва процеси у фоновому режимі.
Зачекайте
wait -n
Це очікує припинення будь-якого фонового завдання.
Через -n
опцію для цього потрібен bash 4.3 або вище.
Убити
pkill -P $$
Це вбиває будь-яку роботу, для якої поточний процес є батьківським. Іншими словами, це вбиває будь-який фоновий процес, який ще триває.
Якщо у вашій системі немає pkill
, спробуйте замінити цей рядок на:
kill 0
що також вбиває поточну групу процесу .
Легко перевіряється приклад
Змінивши скрипт, ми можемо перевірити його навіть без gulp
встановленого:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
Вищеописаний сценарій можна запустити як, bash script.sh 1 3
і перший процес закінчується першим. Крім того, можна запустити його як bash script.sh 3 1
і другий процес закінчиться перший. В будь-якому випадку видно, що це працює за бажанням.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?