Quel est le but de "&&" dans une commande shell?
autant que je sache, utiliser &
après la commande est pour l'exécuter en arrière-plan.
exemple d'utilisation de &
: tar -czf file.tar.gz dirname &
mais &&
? (regardez cet exemple: https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
8 réponses
&&
permet de faire quelque chose en se basant sur le fait que la commande précédente a été complétée avec succès - c'est pourquoi vous avez tendance à la voir enchaînée comme do_something && do_something_else_that_depended_on_something
.
de plus, vous avez aussi ||
qui est l'or logique, et aussi ;
qui est juste un séparateur qui ne se soucie pas de ce qui arrive à la commande avant.
$ false || echo "Oops, fail"
Oops, fail
$ true || echo "Will not be printed"
$
$ true && echo "Things went well"
Things went well
$ false ; echo "This will always run"
This will always run
quelques détails à ce sujet peuvent être trouvés ici listes de commandes dans le manuel de Bash.
"1519220920 de ligne de commande" - quel est le but de &&
?
dans shell, quand vous voyez
$ command one && command two
l'intention est d'exécuter la commande qui suit le &&
seulement si la première commande est réussie. C'est idiomatique des coquilles Posix, et pas seulement trouvé dans Bash.
elle a l'intention d'empêcher le fonctionnement du deuxième processus si le premier échoue.
Processus de retour de 0 pour de vrai, d'autres numéros de positifs pour de faux
"1519250920 Programmes de" retour signal sur la sortie. Ils devraient retourner 0 s'ils sortent avec succès, ou plus de zéro s'ils ne sortent pas. Cela permet une communication limitée entre les processus. le &&
est appelé AND_IF
dans le grammaire en coquille posix , qui fait partie d'un and_or
liste de commandes, qui comprennent également les ||
qui est un OR_IF
avec des analogues de la sémantique.
la Grammaire des symboles:
%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */
grammaire:
and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
les deux opérateurs ont la même priorité et sont évalués de gauche à droite (ils sont associatifs de gauche) par exemple, le suivant:
$ false && echo foo || echo bar $ true || echo foo && echo bar
les deux echo only bar
.
-
dans le premier cas, le false est une commande qui sort avec le statut de
1
$ false $ echo $? 1
qui signifie
echo foo
ne s'exécute pas (c.-à-d. courtcircuitecho foo
). Puis la commandeecho bar
est exécutée. -
dans le second cas, vrai sorties avec un code de
0
$ true $ echo $? 0
et donc
echo foo
n'est pas exécuté, alorsecho bar
est exécuté.
un usage assez courant pour '&&' est la compilation de logiciels avec des autotools. Par exemple:
./configure --prefix=/usr && make && sudo make install
essentiellement si le configure réussit, make est lancé pour compiler, et si cela réussit, make est lancé comme root pour installer le programme. Je l'utilise quand je suis presque sûr que les choses vont marcher, et il me permet de faire d'autres choses importantes comme regarder stackoverflow et pas "surveiller" les progrès.
Parfois, je m'emporte...
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
je fais cela quand par exemple faire un linux à partir de scratch box.
&&
chaînes commandes ensemble. Les commandes successives ne s'exécutent que si les commandes précédentes réussissent.
de même, ||
permettra à la commande successive de s'exécuter si la précédente échoue.
Voir Shell Bash De Programmation .
voir l'exemple:
mkdir test && echo "Something" > test/file
Shell va essayer de créer le répertoire test
et puis, seulement si c'était réussi va essayer de créer le fichier à l'intérieur.
donc vous pouvez interrompre une séquence d'étapes si l'une d'elles a échoué.
command_1 && command_2
: n'exécute command_2 que si command_1 est exécuté avec succès.
command_1 || command_2
: n'exécute command_2 que si command_1 n'est pas exécuté avec succès.
se sent similaire à la façon dont une condition" si "est exécutée dans un langage de programmation grand public, comme dans if (condition_1 && condition_2){...}
condition_2 sera omis si condition_1 est false
et dans if (condition_1 || condition_2){...}
condition_2 sera omis si condition_1 est true
.
Voir, c'est la même astuce que vous utilisez pour coder:)
il s'agit d'exécuter une deuxième instruction si la première instruction se termine avec succès. Comme une déclaration if:
if (1 == 1 && 2 == 2)
echo "test;"
Ses premiers essais si 1==1, si c'est vrai, il vérifie si les 2==2