Это запускает оба процесса, ждет первого, который завершает, а затем убивает другой:
#!/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
?