71 votes

Y a-t-il une différence entre le fonctionnement de deux esperluettes et d'un point-virgule dans bash ?

Si je voulais exécuter deux commandes distinctes sur une seule ligne, je pourrais faire ceci :

cd /home; ls -al

ou ceci :

cd /home && ls -al

Et j'obtiens les mêmes résultats. Cependant, que se passe-t-il en arrière-plan avec ces deux méthodes ? Quelle est la différence fonctionnelle entre elles ?

89voto

user9517 Points 113163

El ; sépare simplement une commande d'une autre. Le site && dit n'exécuter la commande suivante que si la précédente a été réussie

cd /home; ls -al

Cela permettra cd /home et même si le cd échoue ( /home n'existe pas, vous n'avez pas la permission de la traverser, etc. ls -al .

cd /home && ls -al

Cela n'exécutera que le ls -al si le cd /home a réussi.

71voto

hyperpallium Points 123
a && b

si a renvoie un code de sortie nul, alors b est exécuté.

a || b

si a renvoie un code de sortie non nul, alors b est exécuté.

a ; b

a est exécuté et ensuite b est exécuté.

16voto

Tom Points 720
cd /fakedir; ls -al

Runs ls dans le répertoire actuel car cd /fakedir échouera et le Shell ignorera le statut de sortie qui n'est pas zéro.

cd /fakedir && ls -al

Parce que le && ne se poursuivra que si la commande précédente s'est terminée normalement (état zéro), qu'aucune ls l'opération sera effectuée.

Il existe d'autres opérateurs, tels que & qui mettra un processus en arrière-plan. Bien qu'il soit souvent placé à la fin d'une commande, il peut être placé au milieu d'une chaîne.

4voto

Mtl Dev Points 697

Vous pouvez également les joindre ensemble comme un if..then..else pour enchaîner la logique de commande.

exemple :

ls file.ext && echo "file exists" || echo "file does not exist"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X