J'ai lu sur && et || et je voudrais exécuter deux commandes dans le faux cas.
J'ai essayé ;
mais ça marche toujours . J'ai essayé de le mettre entre accolades, { command1; command2 }
mais cela entraîne une erreur de syntaxe.
Je veux faire quelque chose comme
command && echo "Ok, continuing" || echo "Check internet connection"; exit 1
qui n'est fermé que s'il n'y a pas de connexion Internet.
command-line
bash
Thomas Weller
la source
la source
()
et{}
.Réponses:
L'utilisation de parens met les commandes dans un sous-shell qui n'est pas toujours ce que vous voulez. Vous pouvez également utiliser des accolades:
L'astuce ici est que, contrairement aux parens, la commande finale entre accolades doit être suivie de
;
.Pourquoi un point-virgule ou une nouvelle ligne est requis
Une accolade est un argument valide pour une commande. Par exemple, voici une accolade comme un argument pour
echo
:Par conséquent, si le shell voit:
Le shell interprète command1 comme n'ayant aucun argument et command2 comme ayant un argument composé du caractère
}
. Une accolade}
n'est interprétée comme fermant un regroupement que si elle suit un point-virgule ou une nouvelle ligne. Pour faire fonctionner ce qui précède:Sous-coques et la différence entre
{...}
et(...)
Notez que les valeurs suivantes sont définies
x
sur 10 mais que ce paramètre est oublié avant l'echo
exécution de la commande:Avec les accolades, en revanche, le réglage de
x=10
est rappelé:La différence est due au fait que les affectations de variables dans un sous-shell ne survivent pas une fois le sous-shell terminé.
Documentation
De
man bash
:la source