Est-il possible d'exécuter deux commandes en même temps dans un script shell?

10

Je sais que sur la ligne de commande, je peux utiliser &pour exécuter une commande en arrière-plan. Mais je me demande si je peux le faire dans un script.

J'ai un script comme celui-ci:

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)

Et je veux courir sh ./stay/get_it_ios.shet sh ./stay/get_it_mix.shensemble pour obtenir des données plus précises. Est-il possible de le faire dans le cadre d'un script shell?

Zen
la source

Réponses:

16

Oui, ça l'est. Si vous voulez faire deux choses simultanément et attendre qu'elles se terminent toutes les deux, vous pouvez faire quelque chose comme:

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

Votre script exécutera ensuite les deux scripts en parallèle et attendra la fin des deux scripts avant de continuer.

DopeGhoti
la source
4
Vous pouvez simplement en exécuter un waitsans argument pour attendre les deux processus.
Stéphane Chazelas
2
Sauf si plus tôt dans le script, vous aviez mis en arrière-plan un troisième processus qui est censé s'exécuter ultérieurement. Mieux vaut déclarer affirmativement ce pour quoi vous travaillez wait, à mon avis.
DopeGhoti
Quand vous dites exécuter les deux scripts en parallèle , voulez-vous dire qu'ils démarreront en même temps? Je veux dire, supposons que nous avons pu enregistrer l'heure avec une très grande précision (par exemple, en utilisant des horloges atomiques). Les deux devraient commencer ensemble? Je demande parce que les scripts se lisent ligne par ligne, non?
Sigur
1
Comme vous le supposez, les scripts ne commenceront pas à être exécutés au même instant jusqu'au cycle d'horloge. Les scripts shell exécutent les commandes dans l'ordre où elles sont données, de sorte que la première commande en arrière-plan s'exécutera avant la seconde, si ce n'est que (dans presque tous les cas) très légèrement. Quand je dis qu'ils "fonctionneront en parallèle", je veux dire exactement cela: les deux s'exécuteront simultanément (sous réserve de la gestion des tâches, de la gestion du signal et / ou de la hiérarchisation du noyau).
DopeGhoti