Bash – comment exécuter une commande une fois la précédente terminée? [dupliquer]

Cette question a déjà des réponses ici :

Commentaires

  • terdon ' réponse ci-dessous est excellent mais vous pouvez supprimer les points-virgules dans la version que vous ' avez montrée ci-dessus ainsi que les commandes sont exécutées dans lordre dans le script, chacune sur sa propre ligne. Le point-virgule est redondant sauf si vous mettez toutes les commandes sur une seule ligne.

Answer

Oui, vous « re le faire de la bonne façon. Les scripts shell exécuteront chaque commande séquentiellement, en attendant que la première se termine avant que la suivante ne démarre. Vous pouvez soit joindre des commandes avec ;, soit les avoir sur des lignes séparées :

command1; command2 

ou

command1 command2 

Il ny a pas besoin de ; si les commandes sont sur des lignes séparées. Vous pouvez également choisir dexécuter la deuxième commande uniquement si la première sest terminée correctement. Pour ce faire, joignez-les avec && :

command1 && command2 

ou

command1 && command2 

Pour plus dinformations sur les différents opérateurs de contrôle disponibles vous, voyez ici .

Commentaires

  • Rappelez-vous quau lieu de &&, OP pourrait simplement ajouter set -e au début du script. Bien sûr, ce nest pas un opérateur de chaînage de processus.
  • @didierc qui provoquera la fermeture du script en cas derreur, et produira également des tonnes de rapports de progression inutiles. Ce nest pas la même chose que de lier deux commandes spécifiques avec &&.
  • @polemon pas vraiment, non. Cest une question très simple posée par un utilisateur novice. Je ' ne voit pas lintérêt dajouter trop de détails. Notez que je nai même pas ' mentionner ||. Je ne ' pas vraiment voir pourquoi wait est pertinent ici, ce nest certainement pas nécessaire pour la simple tâche dexécuter une commande après lautre. Il ne serait nécessaire que pour un contrôle plus fin des processus. Nhésitez pas à soumettre une réponse bien sûr, mais je préfère ' garder la mienne simple.
  • @terdon wouldn ' t qui soit set -v ou set -x plutôt que set -e?
  • @didierc voir mon commentaire ci-dessus, je pensais à set -x, désolé.

Réponse

Dans un cas répétitif comme celui-ci, jai recommandé dutiliser une boucle for .

 for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done  

Il sagit dune version sur une ligne adaptée à la ligne de commande mais pouvant également être utilisée dans un script. Les accolades autour du nom de la variable sont nécessaires lors de lincorporation dune variable dans une chaîne sans espace.

La boucle envoie non seulement les requêtes dans lordre, mais est plus facile à modifier et à réutiliser en cas de besoin, sans autant de soucis. fautes de frappe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *