Dash double point-virgule (;;) syntaxe
Je vais essayé de trouver la façon d'exécuter plusieurs commandes en parallèle dans sh
et attendre la fin.
J'ai trouvé que la suite ne fonctionne pas (sh: 1: Syntax error: ";" unexpected
):
sh -c '(sleep 3 && echo 1) & ; (sleep 3 && echo 2) & ; wait'
Mais cette syntaxe fonctionne comme prévu:
sh -c '(sleep 3 && echo 1) & ;; (sleep 3 && echo 2) & ;; wait'
Mais je ne comprends pas quelle est la différence.
Quel est le sens de ;;
et quand il doit être utilisé?
- ni ligne de commande a fonctionné ici.
;;
est l'option séparateur pourcase
déclaration. - désolé, j'ai eu tort, il donne en fait erreur en bash, mais travaille dans le dash
Vous devez vous connecter pour publier un commentaire.
;;
n'est utilisé que danscase
constructions, pour indiquer la fin d'une alternative. (Il est présent là où vous avezbreak
dans C.)Point de vue syntaxique,
;
et&
à la fois marquer la fin d'une commande. Un retour à la ligne est équivalent à;
, dans une première approximation. La différence entre eux est que;
ou de saut de ligne indique que la commande doit être exécutée dans le premier plan, tandis que&
indique que la commande doit être exécutée en arrière-plan.Donc, ici, vous avez besoin
& wait
.& ;
est une erreur de syntaxe (vous ne pouvez pas avoir une commande vide).& ;;
est aussi une erreur de syntaxe; les cendres laisse passer (comme si tu avais écrit juste&
), mais bash se plaint. De toute évidence votre sh est des cendres variante (comme le tableau de bord, qui est/bin/sh
sur de nombreux dérivés de Debian).;
et&
à la fois marquer la fin d'une commande. Donc, ici, vous avez besoin& wait
.Il doit être utilisé dans un
case
déclaration, entre les cas. Le problème que vous rencontrez ici est que les deux&
et;
sont des séparateurs de commande, et vous ne devriez utiliser l'un d'eux.sh -c '(sleep 3 && echo 1) & (sleep 3 && echo 2) & wait'
fonctionne comme prévu. Il ne précise pas si ce est un sens;;
dans ce contexte.sh
estbash
?