Quel est le but de “&&” dans un shell de commande?
Autant que je sache, à l'aide de &
après la commande pour l'exécuter en arrière-plan.
Exemple de &
utilisation: tar -czf file.tar.gz dirname &
Mais que diriez -&&
? (regardez cet exemple: https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
Vous devez vous connecter pour publier un commentaire.
&&
vous permet de faire quelque chose selon que la commande précédente est terminée avec succès - c'est pourquoi vous avez tendance à le voir enchaîné commedo_something && do_something_else_that_depended_on_something
.En outre, vous avez également
||
qui est le ou logique, et aussi;
qui est juste un séparateur, qui ne se soucie pas de ce qui s'est vraiment passé à la commande avant.Quelques détails à ce sujet peuvent être trouvées ici Les listes de Commandes dans le Manuel de Bash.
false && echo "Will not be printed"
.En coquille, quand vous voyez
le but est d'exécuter la commande qui suit le
&&
seulement si la première commande est réussie. C'est idiomatiques de Posix coquilles, et pas seulement trouvé dans Bash.Il a l'intention d'empêcher l'exécution de la deuxième si la première échoue.
Processus de retour de 0 pour de vrai, d'autres numéros de positifs pour faux
Programmes de retour d'un signal sur la sortie. Ils devraient retourner 0 si ils sortent avec succès, ou supérieur à zéro si ils ne le font pas. Cela permet à un nombre limité de communication entre les processus.
La
&&
est appeléAND_IF
dans le le shell posix grammaire, qui fait partie d'unand_or
liste de commandes, qui comprennent également les||
qui est unOR_IF
similaires sémantique.Grammaire symboles:
Grammaire:
Les deux opérateurs ont la même priorité et sont évalués de gauche à droite (ils sont associativité à gauche) Par exemple, les suivantes:
écho seulement
bar
.Dans le premier cas, le faux est une commande qui se termine avec le statut de
1
qui signifie
echo foo
ne fonctionne pas (c'est à dire, court-circuitecho foo
). Ensuite, la commandeecho bar
est exécutée.Dans le second cas, la vraie se termine avec un code de
0
et donc
echo foo
n'est pas exécutée, puisecho bar
est exécutée.Un bien commun de l'utilisation de "&& " est la compilation de logiciels avec les autotools. Par exemple:
Fondamentalement, si le configurer réussit, est exécuté à la compilation, et si cela réussit, est exécuté en tant que root pour installer le programme. Je l'utiliser quand je suis la plupart du temps assurez-vous que les choses vont fonctionner, et cela me permet de faire d'autres choses importantes comme regarder stackoverflow un pas "suivre" les progrès.
Parfois, je suis vraiment emporté...
Je le fais quand par exemple, faire un linux from scratch-fort.
set -o errexit
pour Bash.&&
chaînes de commandes. Successives de commandes ne s'exécutera que si précédents réussir.De même,
||
permettra à l'successives de la commande à exécuter si la précédente échoue.Voir La Programmation Shell Bash.
Voir l'exemple:
Shell va essayer de créer un répertoire
test
et puis, seulement si elle a été réussie vais essayer de créer le fichier à l'intérieur.De sorte que vous pouvez interrompre une séquence d'étapes si l'un d'entre eux a échoué.
command_1 && command_2
: exécuter command_2 uniquement lorsque command_1 est exécutée avec succès.command_1 || command_2
: exécuter command_2 uniquement lorsque command_1 n'est pas un succès exécuté.Sent semblable comme la façon dont un " si " condition est exécutée dans une programmation grand public de la langue, comme, dans
if (condition_1 && condition_2){...}
condition_2 va être omis si condition_1 estfalse
et dansif (condition_1 || condition_2){...}
condition_2 va être omis si condition_1 esttrue
.Voir, c'est la même astuce que vous utiliser pour le codage 🙂
C'est pour exécuter une deuxième déclaration, si la première instruction se termine avec succès. Comme une instruction if:
Son premier essaie si 1==1, si c'est vrai, il vérifie si les 2==2
&&
if
tests de travailler dans bash. Je n'ai jamais pensé à lui comme une chaîne de comparaison des commandes, de rupture lorsque l'un d'entre eux a échoué. Donc, vous avez mon upvote 🙂||
, à la chaîne de commandes jusqu'à ce que l'un d'entre eux réussit:eei || leu || uie || echo prout3 || echo "never executed"