Je lance normalement plusieurs commandes avec quelque chose comme ceci:
sleep 2 && sleep 3
ou
sleep 2 ; sleep 3
mais que faire si je veux les exécuter tous les deux en arrière-plan à partir d'une commande en ligne de commande?
sleep 2 & && sleep 3 &
ne fonctionne pas. Et ne remplace pas non plus &&
par ;
Y a-t-il un moyen de le faire?
Comment voulez-vous qu'ils fonctionnent? Si vous voulez qu’ils soient démarrés en arrière-plan et que vous exécutiez séquentiellement, procédez comme suit:
(sleep 2; sleep 3) &
Si, par contre, vous souhaitez qu'ils s'exécutent en arrière-plan dans parallel, vous pouvez le faire à la place:
sleep 2 & sleep 3 &
Et les deux techniques pourraient être combinées, telles que:
(sleep 2; echo first finished) & (sleep 3; echo second finished) &
Bash étant bash, il y a souvent une multitude de techniques différentes pour accomplir la même tâche, bien que parfois avec des différences subtiles entre elles.
Vous devez ajouter des parens dans votre dernière version -
(sleep 2 &) && (sleep 3 &)
ou cela fonctionne aussi -
(sleep 2 &) ; (sleep 3 &)
pour exécuter plusieurs commandes en arrière-plan, vous devez ajouter &
fin de chaque commande . ex: (command1 &) && (command2 &) && (command3 &)
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 difficiles en ce qui concerne 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 nouveau sous-shell. Dans ce cas, je ne sais pas si cela fait une différence.
Cela marche:
$(sleep 2 &) && sleep 3 &
Aussi, vous pouvez faire:
$(sleep 2 && sleep 3) &
J'ai aussi la même mission . J'ai essayé (sleep2 ; fg )& sleep3 ; fg
, ça marche . Et quand vous pressez ctrl + c en double, les deux processus peuvent être arrêtés.
Si vous voulez exécuter plusieurs commandes séquentiellement , il existe une méthode très simple qui fonctionne partout: Créer un fichier! L'avantage de cette méthode est qu'elle est propre et simple.
Commencez par créer votre fichier avec un nom, par exemple commands.sh
. Ensuite, mettez vos commandes là-bas. Voici un exemple:
commands.sh:
#!/system/bin/sh
sleep 3;
sleep 2;
OK, maintenant nous sommes dans la dernière étape. Pour exécuter des commandes en arrière-plan (séquentiellement), exécutez simplement:
$ sh commands.sh &