É possível executar dois comandos ao mesmo tempo em um script de shell?

10

Eu sei que na linha de comando eu posso usar &para executar um comando em segundo plano. Mas estou pensando se posso fazer isso em um script.

Eu tenho um script como este:

date_stamp=$(date +"%Y-%m-%d" --date='yesterday')
shopt -s extglob

cd /my/working/directory/

sh ./stay/get_it_ios.sh
sh ./stay/get_it_mix.sh

cd stay
zip  ../stay_$date_stamp.zip  ./*201*

rm ./stay/!(*py|*sh)

E eu quero correr sh ./stay/get_it_ios.she sh ./stay/get_it_mix.shem conjunto para obter dados mais precisos. É possível fazer isso no escopo de um script de shell?

zen
fonte

Respostas:

16

Sim, ele é. Se você quiser fazer duas coisas simultaneamente e aguardar a conclusão de ambas, poderá fazer algo como:

sh ./stay/get_it_ios.sh &  PIDIOS=$!
sh ./stay/get_it_mix.sh &  PIDMIX=$!
wait $PIDIOS
wait $PIDMIX

Seu script executará os dois scripts em paralelo e aguarde a conclusão de ambos os scripts antes de continuar.

DopeGhoti
fonte
4
Você pode simplesmente executar um waitsem argumento para aguardar os dois processos.
Stéphane Chazelas
2
A menos que tenha sido anteriormente no script, você tinha um segundo processo em segundo plano que deveria ser executado em um ponto posterior. Melhor declarar afirmativamente o que você waitquer, na minha opinião.
DopeGhoti 29/08/19
Quando você diz que executa os dois scripts em paralelo , quer dizer que eles começarão ao mesmo tempo? Quero dizer, suponha que fomos capazes de registrar a hora com uma precisão muito grande (por exemplo, usando relógios atômicos). Ambos devem começar juntos? Eu pergunto porque os scripts lêem linha por linha, certo?
Sigur
1
Conforme você supõe, os scripts não começarão a execução no mesmo instante até o ciclo do relógio. Os scripts de shell executam os comandos na ordem em que são fornecidos; portanto, o primeiro comando em segundo plano será executado antes do segundo se apenas (em quase todos os casos) muito pouco. Quando digo que eles "rodarão em paralelo", quero dizer exatamente isso: ambos serão executados simultaneamente (sujeitos a gerenciamento de tarefas, manipulação de sinais e / ou priorização de kernel).
DopeGhoti