Comment peut-on exécuter plusieurs programmes en arrière-plan avec une seule commande?
J'ai essayé les commandes ci-dessous, mais elles ne fonctionnent pas.
nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'
nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'
bash
shell-script
Rahul Patil
la source
la source
Réponses:
Du point de vue de la syntaxe du shell,
&
sépare les commandes telles que;
/|
/&&
... (bien que, bien sûr, avec une sémantique différente). Donc c'est juste:la source
;
lance la commande suivante dès que la première est terminée.&
met effectivement la commande en arrière-plan. juste essayer ceci:echo foo & echo bar & echo test &
sudo
ça, vous pouvez entrer le mot de passe une seule fois, puis le bouclerbash -c
ou similaire.La section de la page de manuel bash intitulée Compound Commands (Commandes composées) contient deux options qui fonctionnent: les commandes de liste et de groupe.
Une commande de groupe est une série de commandes entourées d'accolades
{}
. Une liste est la même, entre parenthèses()
. Les deux peuvent être utilisés pour mettre en arrière-plan plusieurs commandes au sein de, et enfin pour mettre en arrière-plan la collection entière comme un ensemble. La structure de liste exécute des commandes dans un sous-shell, de sorte que les affectations de variables ne sont pas conservées.Pour exécuter un groupe de commandes:
Vous pouvez également exécuter vos commandes dans une liste (sous-shell):
la source
()
syntaxe de liste exécute les commandes incluses dans un sous-shell, ainsi les variables ne sont pas conservées.autrement:
la source
&&
dans votre question, cela signifie d'abord exécuter une commande, puis si exécuter avec succès, exécutez la commande suivante.Si vous ne le considérez pas, vous pouvez exécutercommand1 & ; command2 & ;
;
sans problème