Que fait set -e?

28

J'ai un script que j'ai trouvé et j'essaie de le faire fonctionner, il télécharge et installe simplement les bibliothèques d'exécution Apache. La première ligne est set -eet elle provoque une erreur; qu'est-ce que ça set -efait?

spitfiredd
la source

Réponses:

22

Cette fonction intégrée est si compliquée qu'elle mérite sa propre section.

set vous permet de modifier les valeurs des options du shell et de définir les paramètres de position, ou d'afficher les noms et les valeurs des variables du shell.

L' -eoption

-e

Quittez immédiatement si un pipeline (voir Pipelines), qui peut consister en une seule commande simple (voir Commandes simples), une commande de sous-shell entre parenthèses (voir Groupement de commandes), ou l'une des commandes exécutées dans le cadre d'une liste de commandes entourée de accolades (voir Groupement de commandes) renvoie un état différent de zéro. Le shell ne se ferme pas si la commande qui échoue fait partie de la liste de commandes immédiatement après un mot clé while ou until, une partie du test dans une instruction if, une partie de toute commande exécutée dans un && ou || liste à l'exception de la commande suivant le && ou || final, toute commande dans un pipeline sauf le dernier, ou si l'état de retour de la commande est inversé avec!. Un trap sur ERR, s'il est défini, est exécuté avant la fermeture du shell.

Cette option s'applique à l'environnement shell et à chaque environnement de sous-shell séparément (voir Environnement d'exécution de commandes) et peut entraîner la fermeture des sous-shell avant d'exécuter toutes les commandes du sous-shell.

Source: www.gnu.org

Modifié en raison du commentaire de @ psusi ci-dessous.

De plus, vous pouvez lire la page de manuel de bash

man bash 

dans la section: SHELL BUILTIN COMMANDS

ou problème

help set 

pour un court message d'aide.

NickTux
la source
1
Comme il s'agit d'une commande intégrée, vous le souhaitez help setet le manuel bash complet l'est info bashsi vous avez installé bash-doc.
psusi
Merci pour la clarification @psusi. help setet / ou man bashsont les bons pour set.
NickTux
12

set -e en bref, lorsqu'il se trouve en haut de votre script bash, indique au script de se fermer dès qu'une ligne du script échoue (avec quelques exceptions répertoriées dans le manuel). [1]

En tant qu'option de débogage, elle est souvent utilisée avec set -x, qui consiste à imprimer chaque ligne de commande étendue avant l'exécution avec un signe "+". [2]

Voir plus à:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Devy
la source
2
Merci pour une explication simple. Je vois souvent set -xe dans Dockerfiles et maintenant je connais la raison :)
ymakux