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 &&
?
Réponses:
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&&
.la source
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.Si vous l'exécutez sur un terminal interactif (au lieu d'un script), vous pouvez utiliser
fg
pour ramener la commande en arrière-plan au focus oujobs
pour voir une liste des tâches en arrière-plan.la source