Commandes consécutives

14

Ai-je raison de supposer que lorsque ;joint deux commandes sur une ligne, Bash attend toujours la fin de la première commande avant d'exécuter la deuxième commande? Et de même, dans un script shell contenant deux commandes différentes sur des lignes différentes, Bash attend toujours que la commande sur la première ligne se termine avant d'exécuter la commande sur la deuxième ligne?

Si tel est le cas, existe-t-il un moyen d'exécuter deux commandes sur une seule ligne ou dans un script, afin que la deuxième commande n'attende pas la fin de la première commande?

En outre, les différentes lignes d'un script shell sont-elles équivalentes à des lignes distinctes jointes par ;ou &&?

EmmaV
la source
1
Vous pourriez être intéressé par Quels sont les opérateurs de contrôle et de redirection du shell? .
terdon

Réponses:

26

Vous avez raison, les commandes dans les scripts sont exécutées séquentiellement par défaut.

Vous pouvez exécuter une commande en arrière-plan en la suffixant avec &(une seule esperluette).

Les commandes sur des lignes distinctes sont équivalentes aux commandes jointes ;par défaut. Si vous dites à votre shell d'interrompre les codes de sortie différents de zéro ( set -e), le script s'exécutera comme si toutes les commandes étaient jointes &&.

Stephen Kitt
la source
2

Pour répondre à votre deuxième question, vous pouvez utiliser &pour lancer une commande en arrière-plan et poursuivre le script sans attendre qu'il se termine.

commandA & commandB

Si vous l'exécutez sur un terminal interactif (au lieu d'un script), vous pouvez utiliser fgpour ramener la commande en arrière-plan au focus ou jobspour voir une liste des tâches en arrière-plan.

rmelcer
la source