Autant que je sache, utiliser &
après la commande est pour l'exécuter en arrière-plan.
Exemple d' &
utilisation:tar -czf file.tar.gz dirname &
Mais qu'en est-il &&
? (regardez cet exemple: /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
bash
shell
command-line
syntax
Capitaine
la source
la source
false && echo "Will not be printed"
.En coquille, quand vous voyez
l'intention est d'exécuter la commande qui suit
&&
uniquement si la première commande réussit. C'est idiomatique des coquilles Posix, et pas seulement dans Bash.Il vise à empêcher l'exécution du deuxième processus si le premier échoue.
Vous remarquerez peut-être que j'ai utilisé le mot «intention» - c'est pour une bonne raison. Tous les programmes n'ont pas le même comportement, donc pour que cela fonctionne, vous devez comprendre ce que le programme considère comme un "échec" et comment il le gère en lisant la documentation et, si nécessaire, le code source.
Votre shell considère une valeur de retour de 0 pour true, d'autres nombres positifs pour false
Les programmes renvoient un signal à la sortie. Ils doivent retourner 0 s'ils sortent avec succès, ou supérieur à zéro s'ils ne le font pas. Cela permet une quantité limitée de communication entre les processus.
Le
&&
est appeléAND_IF
dans la grammaire du shell posix , qui fait partie d'uneand_or
liste de commandes, qui incluent également le||
qui est unOR_IF
avec une sémantique similaire.Symboles de grammaire, cités dans la documentation:
Et la grammaire (également citée dans la documentation), qui montre que n'importe quel nombre de
AND_IF
s (&&
) et / ouOR_IF
s (||
) peut être enchaîné (commeand_or
défini de manière récursive):Les deux opérateurs ont la même priorité et sont évalués de gauche à droite (ils sont associatifs à gauche). Comme le disent les docs:
Dans le premier cas, le faux est une commande qui se termine avec le statut
1
ce qui signifie
echo foo
ne fonctionne pas (c'est-à-dire court-circuitageecho foo
). Ensuite, la commandeecho bar
est exécutée.Dans le second cas, les vraies sorties avec un code de
0
et
echo foo
n'est donc pas exécuté, puisecho bar
est exécuté.la source
Une utilisation assez courante pour «&&» est la compilation de logiciels avec des outils automatiques. Par exemple:
Fondamentalement, si la configuration réussit, make est exécuté pour être compilé, et si cela réussit, make est exécuté en tant que root pour installer le programme. J'utilise ceci lorsque je suis presque sûr que les choses fonctionneront, et cela me permet de faire d'autres choses importantes comme regarder stackoverflow et ne pas «surveiller» la progression.
Parfois je m'emporte vraiment ...
Je le fais quand par exemple faire un linux à partir de zéro.
la source
set -o errexit
pour Bash.&&
chaînes de commandes ensemble. Les commandes successives ne s'exécutent que si les précédentes réussissent.De même,
||
permettra à la commande successive de s'exécuter si la précédente échoue.Voir Programmation Bash Shell .
la source
Voir l'exemple:
Shell essaiera de créer un répertoire
test
et ensuite, seulement s'il a réussi , essaiera de créer un fichier à l'intérieur.Vous pouvez donc interrompre une séquence d'étapes si l'une d'elles échoue.
la source
Il s'agit d'exécuter une deuxième instruction si la première instruction se termine avec succès. Comme une instruction if:
Son premier essai si 1 == 1, si c'est vrai, il vérifie si 2 == 2
la source
&&
if
tests dans bash. Je n'y ai jamais pensé comme une chaîne de commandes de comparaison, se cassant quand l'une d'elles échouait. Vous avez donc mon vote positif :)||
, pour enchaîner les commandes jusqu'à ce que l'une d'elles réussisse:eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
: exécuter command_2 uniquement lorsque command_1 est exécuté avec succès.command_1 || command_2
: exécuter command_2 uniquement lorsque command_1 n'a pas été exécuté avec succès.Cela ressemble à la façon dont une condition «si» est exécutée dans un langage de programmation traditionnel, comme dans
if (condition_1 && condition_2){...}
condition_2 sera omise si condition_1 estfalse
et dansif (condition_1 || condition_2){...}
condition_2 sera omise si condition_1 l'esttrue
. Vous voyez, c'est la même astuce que vous utilisez pour le codage :)la source
Lorsque le programme vérifie si la commande, alors le programme crée un nombre appelé code de sortie, si les deux conditions sont vraies, le code de sortie est zéro (0), sinon, le code de sortie est un nombre positif. uniquement lors de l'affichage Égal si le code de sortie est généré zéro (0), cela signifie que les deux conditions sont vraies.
la source
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi