Dans les tutoriels et les procédures, je vois souvent des commandes combinées. Par exemple,
sudo apt-get update && sudo apt-get install pyrenamer
Il semble y avoir quatre connecteurs possibles: &
, &&
, ||
et ;
. Bien que le &
connecteur soit clair pour moi (il envoie un processus à l’arrière-plan et laisse le terminal disponible), la différence entre &&
et ;
. Et je ne savais rien ||
avant le commentaire de Kaya.
Les questions suivantes traitent de la différence entre les deux connecteurs, mais le font principalement dans les commentaires:
Donc, voici un certain nombre de questions connexes:
- Et quelle est la différence entre
;
et&&
? - Quand devriez-vous les utiliser respectivement? Il serait bien de voir quelques cas d’utilisation: si je veux exécuter une commande puis éteindre mon ordinateur, quel connecteur devrais-je choisir?
- Quels sont leurs avantages et leurs dangers ? Robie Basak mentionne dans un commentaire à cette réponse qu'une commande semblable à, par exemple,
cd /somewhere_else; rm -Rf *
peut avoir des conséquences destructives si le premier élément de la chaîne de commande échoue. - Si pertinent, d'où viennent-ils?
command-line
bash
don.joey
la source
la source
||
est identique&&
à celui-ci, sauf qu'il n'exécute la deuxième commande que si la première a quitté avec un statut non nul (échec).set -e
arrêtera le script en cas d'échec, comme si toutes les commandes étaient connectées&&
.Réponses:
Cheatsheet:
la source
A & B &
exécutez A en arrière-plan, puis B en arrière-plan (quel que soit votre succès) et renvoyez le contrôle au shell. Cela fonctionne souvent à peu près comme si vous exécutiez les deux processus en même temps.(A && B) &
.&&
exécute la deuxième commande uniquement si la première est sortie avec le statut 0 (a réussi).;
exécute les deux commandes, même si la première sort avec un statut différent de zéro.Votre exemple avec
&&
peut être paraphrasé de la manière suivante:la source
;
si la deuxième commande n'a pas besoin de la précédente pour réussir.Utiliser
;
exécutera les commandes, que la première commande soit réussie ou non.utiliser
&&
execute 2nd command uniquement lorsque la première commande a été exécutée avec succès (état 0).Les deux sont utilisés sur des perspectives différentes. Comme pour un processus plus long, disons que pour une installation, vous devez le compiler et l'installer. vous devriez
make && make install
. Donc, l'installation ne fonctionnera qu'en cas demake
succès.Donc, pour les commandes dépendantes, vous devriez utiliser
&&
Wring bash, ou des commandes avec des commandes indépendantes utilisent
;
Donc , si vous voulez éteindre l' ordinateur même le premier emploi utilisation échoué
;
, mais si besoin le succès du premier emploi initier l'utilisation d'arrêt&&
la source
a ; b
s'exécutera b quel que soit le statut de sortie de a.a && b
se déroulera b que si a réussi.Ceci est nécessaire et suffisant pour répondre aux 3 premières questions. En particulier, le 2 est trop large et ne peut pas donner "une" réponse définitive - votre meilleur pari est de décider au cas par cas.
En ce qui concerne la 4ème question: Ce sont la syntaxe Bash .
Il n'y a pas de danger intrinsèque à utiliser non plus. Encore une fois, la définition ci-dessus est suffisante. Cela implique que vous écriviez
&&
quandb
a des effets involontaires sia
ne réussit pas. Il n'y a pas besoin de règles ou d'explications supplémentaires, à mon humble avis.la source
Une très bonne règle de base. J'ajouterais que dans certains cas, l'utilisation de ces commandes dans un sous-shell a du sens si nous voulons les considérer comme une seule unité ou si nous ne voulons pas coupler certains résultats d'opérations au shell actuel.
Exemples:
-concatenate la sortie de deux commandes:
- aller dans un répertoire et exécuter une commande à partir de là sans changer le répertoire en cours du shell:
la source