248 votes

Comment exécuter plusieurs commandes d'arrière-plan en bash sur une seule ligne ?

Je lance normalement plusieurs commandes avec quelque chose comme ça :

sleep 2 && sleep 3

o

sleep 2 ; sleep 3

mais que faire si je veux les exécuter tous les deux en arrière-plan à partir d'une seule commande en ligne de commande ?

sleep 2 & && sleep 3 &

ne fonctionne pas. Et le fait de remplacer && con ;

Y a-t-il un moyen de le faire ?

468voto

Kitsune Points 3083

Comment voulez-vous qu'ils fonctionnent exactement ? Si vous voulez qu'ils soient lancés dans le arrière-plan et exécuter séquentiellement vous feriez quelque chose comme ça :

{ sleep 2; sleep 3; } &

Si vous voulez sleep 3 pour fonctionner uniquement si sleep 2 réussit, alors :

sleep 2 && sleep 3 &

Si, par contre, vous souhaitez qu'ils fonctionnent en parallèle dans le arrière-plan vous pouvez faire ceci à la place :

sleep 2 & sleep 3 &

Et les deux techniques pourraient être combinées, par exemple :

{ sleep 2; echo first finished; } & { sleep 3; echo second finished; } &

Bash étant bash, il existe souvent une multitude de techniques différentes pour accomplir la même tâche, avec parfois des différences subtiles entre elles.

58voto

iagreen Points 4532

Tu dois ajouter des parenthèses dans ta dernière version

(sleep 2 &) && (sleep 3 &)

ou ceci fonctionne également

(sleep 2 &) ; (sleep 3 &)

11voto

saeed Points 131

Pour exécuter plusieurs commandes en arrière-plan, vous devez ajouter & la fin de chaque commande. ex : (command1 &) && (command2 &) && (command3 &)

7voto

Greg Reagle Points 71

Les réponses ci-dessus utilisent des parenthèses. Bash peut également utiliser des accolades dans un but similaire :

{ sleep 2 && sleep 3; } &

Notez que les accolades sont plus pointilleuses sur la syntaxe - l'espace après { l'espace avant } et le point-virgule final sont obligatoires. Dans certaines situations, les accolades sont plus efficaces car elles ne créent pas de nouvelle sous-coquille. Dans ce cas, je ne sais pas si cela fait une différence.

3voto

higuaro Points 7796

Ça marche :

$(sleep 2 &) && sleep 3 &

Vous pouvez aussi le faire :

$(sleep 2 && sleep 3) &

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X