#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait (sem argumentos) aguardará até que todos os processos em segundo plano sejam encerrados.
A descrição completa waitdo bashmanual:
wait [-n] [n ...]
Aguarde cada processo filho especificado e retorne seu status de encerramento. Cada um npode ser um ID de processo ou uma especificação de trabalho; se uma especificação de trabalho for fornecida, todos os processos no pipeline desse trabalho serão aguardados. Se nnão for fornecido, todos os processos filhos ativos no momento são aguardados e o status de retorno é zero. Se a
-nopção for fornecida, waitaguarde o término de qualquer trabalho e retorne seu status de saída. Se nespecificar um processo ou trabalho inexistente, o status de retorno será 127. Caso contrário, o status de retorno será o status de saída do último processo ou trabalho aguardado.
PID1=$!e, em seguida, esperar por todas elaswait "$PID1" "$PID2" "$PID3". Isso é um pouco mais complicado, mas funcionará se o processo tiver outros filhos pelos quais você não deseja esperar.