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 ?

3voto

Bemipefe Points 131

Vous pouvez utiliser la substitution de commande bash $(command) comme ça :

$(command1 ; command2) &

Notez que stdin et stdout sont toujours liés au processus parent et que rediriger au moins le stdout peut être délicat. Une autre solution consiste à enchaîner les commandes sur une seule ligne, puis à passer la chaîne de caractères à la commande bash pour créer un nouveau processus qui se chargera de l'exécution.

bash -c "command1 ; command2" & 

Ceci est particulièrement utile dans un script bash lorsque vous devez exécuter plusieurs commandes en arrière-plan.

Ces deux déclarations devraient être équivalentes. A bash est créé dans les deux cas pour traiter la commande (chaîne de commande) et la & à la fin détache l'exécution.

Cette fois, vous pouvez ajouter &>/dev/null avant le & à la fin de la commande pour rediriger au moins le stdout et éviter la sortie sur le stdout du processus parent. Quelque chose comme :

bash -c "command1 ; command2" &>/dev/null &

0voto

dingyang wang Points 1

J'ai aussi la même mission. J'ai essayé (sleep2 ; fg )& sleep3 ; fg ,ça marche. Et quand vous faites ctrl+c double, les deux processus peuvent être stoppés.

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