Ist es möglich, zwei Befehle gleichzeitig in einem Shell-Skript auszuführen?

10

Ich weiß, dass ich in der Befehlszeile &einen Befehl im Hintergrund ausführen kann . Aber ich frage mich, ob ich es in einem Skript tun kann.

Ich habe ein Skript wie dieses:

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)

Und ich will laufen sh ./stay/get_it_ios.shund sh ./stay/get_it_mix.shzusammen genauere Daten zu erhalten. Ist dies im Rahmen eines Shell-Skripts möglich?

Zen
quelle

Antworten:

16

Ja, so ist es. Wenn Sie zwei Dinge gleichzeitig ausführen und warten möchten, bis beide abgeschlossen sind, können Sie Folgendes tun:

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

Ihr Skript führt dann beide Skripte parallel aus und wartet, bis beide Skripte abgeschlossen sind, bevor Sie fortfahren.

DopeGhoti
quelle
4
Sie können einfach einen waitohne Argument ausführen , um auf beide Prozesse zu warten.
Stéphane Chazelas
2
Sofern nicht früher im Skript, haben Sie einen dritten Prozess im Hintergrund ausgeführt, der zu einem späteren Zeitpunkt ausgeführt werden soll. waitMeiner Meinung nach ist es besser, bejahend zu erklären, wofür Sie da sind .
DopeGhoti
Wenn Sie sagen, dass beide Skripte parallel ausgeführt werden, bedeutet dies, dass sie gleichzeitig gestartet werden? Ich meine, nehmen wir an, wir konnten die Zeit mit sehr großer Genauigkeit registrieren (zum Beispiel mit Atomuhren). Beide sollten zusammen beginnen? Ich frage, weil die Skripte Zeile für Zeile lesen, oder?
Sigur
1
Wie Sie vermuten, werden die Skripte erst im Taktzyklus mit der Ausführung beginnen. Shell - Skripte ausführen , um die Befehle in der Reihenfolge , wie sie gegeben werden, so dass der erste backgrounded Befehl vor dem zweiten Lauf, wenn nur (in fast allen Fällen) sehr leicht. Wenn ich sage , sie werden „parallel laufen“, meine ich genau das: beide werden laufen gleichzeitig (je nach Auftragsmanagement, Signalverarbeitung und / oder Kernel - Priorisierung).
DopeGhoti