#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait (sin ningún argumento) esperará hasta que todos los procesos en segundo plano hayan salido.
La descripción completa de waiten el bashmanual:
wait [-n] [n ...]
Espere a cada proceso secundario especificado y devuelva su estado de finalización. Cada uno npuede ser un ID de proceso o una especificación de trabajo; Si se proporciona una especificación de trabajo, se esperan todos los procesos en la tubería de ese trabajo. Si nno se proporciona, se esperan todos los procesos secundarios actualmente activos y el estado de retorno es cero. Si -nse proporciona la
opción, waitespera a que finalice cualquier trabajo y devuelve su estado de salida. Si nespecifica un proceso o trabajo inexistente, el estado de retorno es 127. De lo contrario, el estado de retorno es el estado de salida del último proceso o trabajo esperado.
PID1=$!y luego esperarlos a todoswait "$PID1" "$PID2" "$PID3". Eso es un poco más complicado, pero funcionará si el proceso tiene otros hijos a los que no desea esperar.