GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi bash ne s'arrête-t-il pas en cas d'erreur pour les échecs dans la séquence de commandes court-circuitées ?

La logique ici est que votre utilisation de && est déjà vérification des erreurs. De la même manière, bash ne traite pas un échec dans un if condition vaut la peine d'être abandonnée, même avec set -e .

Lorsque vous placez les commandes entre parenthèses, vous exécutez en fait ces commandes dans un sous-shell, de sorte que le script lui-même ne voit que le retour de ce sous-shell, c'est-à-dire :il ne sait pas que && est impliqué du tout, donc il s'interrompt comme prévu.


Citons le manuel de référence :

Le shell ne se ferme pas si la commande qui échoue fait partie de la liste de commandes suivant immédiatement un mot-clé while ou until, fait partie du test dans une instruction if, fait partie de toute commande exécutée dans un &&ou || liste sauf la commande suivant le &&ou || final, toute commande dans un pipeline sauf la dernière, ou si le statut de retour de la commande est inversé avec !


Linux
  1. Commande yum-config-manager introuvable [Réparer]

  2. Commande introuvable dans Bash corrigé

  3. Pourquoi la substitution de processus Bash ne fonctionne-t-elle pas avec certaines commandes ?

  4. Pourquoi Bash ne stocke-t-il pas les commandes commençant par des espaces ?

  5. Pourquoi `exit &` ne fonctionne pas ?

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

c_rehash :Erreur de commande introuvable – Solution

If…else…if Statement (erreur de commande introuvable) ?

Bash ignorant l'erreur pour une commande particulière

Bash :Pourquoi le script parent ne se termine-t-il pas sur SIGINT lorsque le script enfant piège SIGINT ?

Pourquoi cette commande ldapadd se termine-t-elle avec une erreur de syntaxe non valide ?