È possibile eseguire due comandi contemporaneamente in uno script di shell?


10

So che sulla riga di comando posso usare &per eseguire un comando in background. Ma mi chiedo se posso farlo in una sceneggiatura.

Ho una sceneggiatura come questa:

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 voglio correre sh ./stay/get_it_ios.she sh ./stay/get_it_mix.shinsieme per ottenere dati più precisi. È possibile farlo nell'ambito di uno script di shell?

Risposte:


16

Sì. Se vuoi fare due cose contemporaneamente e aspettare che siano completate entrambe, puoi fare qualcosa del tipo:

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

Lo script eseguirà quindi entrambi gli script in parallelo e attenderà il completamento di entrambi gli script prima di continuare.


4
Puoi semplicemente eseguirne uno waitsenza argomento per attendere entrambi i processi.
Stéphane Chazelas,

2
Se non in precedenza nella sceneggiatura, avresti messo in background un terzo processo che dovrebbe essere eseguito in un secondo momento. Meglio dichiarare affermativamente quello che stai waitcercando, secondo me.
DopeGhoti,

Quando dici di eseguire entrambi gli script in parallelo , vuoi dire che inizieranno contemporaneamente? Voglio dire, supponiamo che siamo stati in grado di registrare l'ora con un'enorme precisione (ad esempio, usando orologi atomici). Entrambi dovrebbero iniziare insieme? Chiedo perché gli script leggono riga per riga, giusto?
Sigur,

1
Mentre supponi, gli script non inizieranno l'esecuzione nello stesso istante fino al ciclo di clock. Gli script Shell eseguono i comandi nell'ordine in cui sono stati dati, quindi il primo comando in background verrà eseguito prima del secondo se solo (in quasi tutti i casi) molto leggermente. Quando dico che "funzioneranno in parallelo", intendo esattamente questo: entrambi verranno eseguiti contemporaneamente (soggetto a gestione dei lavori, gestione del segnale e / o priorità del kernel).
DopeGhoti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.