web-dev-qa-db-fra.com

Quelle est la difference entre "command && command" et "command; command"

Je vois ces deux utilisations sur Ubuntu "commande && commande" et "commande; commande",
par exemple. apt-get update && apt-get upgrade

Qu'est-ce qui différerait si j'utilise apt-get update; apt-get upgrade?
Je ne demande pas cet usage spécifique, mais en général, quelle est la différence entre ces deux usages?

49
user208555

&& est un opérateur logique. ; est un séquençage simple.

Dans cmd1 && cmd2, cmd2 ne sera exécuté que si cmd1 se ferme avec un code retour réussi.

Considérant que dans cmd1; cmd2, cmd2 sera exécuté quel que soit le statut de sortie de cmd1 (en supposant que vous n’ayez pas configuré votre Shell pour qu’il se ferme en cas d’échec de votre script ou de quelque chose de ce genre).

Sur une note connexe, avec cmd1 || cmd2, à l'aide de l'opérateur logique || 'OR', cmd2 ne sera exécuté que si cmd1 échoue (retourne un code de sortie non nul).

Ces opérateurs logiques sont parfois utilisés dans des scripts à la place d'une instruction if de base. Par exemple,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

... peut être réalisé de manière plus concise avec:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
87
Etan Reisner

Syntaxe

command1 && command2

commande2 est exécuté si, et seulement si, command1 renvoie un état de sortie égal à zéro ( vrai ). En d'autres termes, exécutez command1 et s'il réussit, exécutez command2.

command1 ; command2

Les deux commande1 et commande2 seront exécuté indépendamment. Le point-virgule vous permet de saisir plusieurs commandes sur une seule ligne.

associé :

command1 || command2

commande2 est exécutée si, et seulement si, commande1 renvoie un statut de sortie non nul. En d'autres termes, exécutez command1 avec succès ou command2.


Exemple

&& opérateur:

$ rm /tmp/filename && echo "File deleted"

; opérateur:

$ echo "foo" ; echo "bar"

|| opérateur:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

Liens externes

  1. Linuxtopia.org
  2. Tldp.org
33
stderr