Execute um comando bash após alguns comandos simultâneos?

12

Eu quero executar alguns comandos em paralelo. Quando todos esses comandos terminarem, inicie o próximo. Embora a abordagem a seguir funcione

#!/bin/bash
command1 &
command2 &
command3 &&
command4

mas isso não aconteceu. Eu preciso executar command4 quando todos os três primeiros comandos estiverem completamente concluídos.

    
por Googlebot 05.05.2017 / 22:02

2 respostas

28
#!/bin/bash
command1 &
command2 &
command3 &

wait
command4

wait (sem nenhum argumento) aguardará até que todos os processos em segundo plano tenham sido encerrados.

A descrição completa de wait no manual bash :

wait [-n] [n ...]

Wait for each specified child process and return its termination status. Each n may be a process ID or a job specification; if a job spec is given, all processes in that job's pipeline are waited for. If n is not given, all currently active child processes are waited for, and the return status is zero. If the -n option is supplied, wait waits for any job to terminate and returns its exit status. If n specifies a non-existent process or job, the return status is 127. Otherwise, the return status is the exit status of the last process or job waited for.

    
por 05.05.2017 / 22:05
0

Eu gosto da resposta wait , mas como um exercício acadêmico, acho que isso também funcionaria:

bash -c 'command1 & command2 & command3 &' && command4

Por favor, corrija-me se estiver errado.

    
por 06.05.2017 / 23:54