Parece que o seu script origina os primeiros 3 comandos, por isso o seu script executa os comandos praticamente ao mesmo tempo. Não há garantia de que os comandos 1-3 serão concluídos antes do 4º concatenar sua saída. A remoção de "e" comercial à direita e barras invertidas fará com que o script aguarde até que cada comando seja concluído antes de iniciar o próximo. Se cada comando usar a maior parte da largura de banda de E / S, essa alteração não diminuirá muito o seu script. Caso contrário, aqui está um método para executar os primeiros 3 comandos em segundo plano, mas esperar até que eles sejam feitos para executar o quarto (não testado).
{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4