accueil > Environnement & utilitaires > set

set : définir et désactiver les options du shell

La commande `set` est utilisée pour définir ou désactiver diverses options qui contrôlent le comportement du shell actuel. C'est une commande essentielle pour améliorer la stabilité des scripts et l'efficacité du débogage. Elle peut également être utilisée pour définir des paramètres positionnels.

Aperçu

La commande `set` permet d'ajuster finement l'environnement d'exécution des scripts shell. Elle offre diverses fonctionnalités telles que l'arrêt du script en cas d'erreur, la prévention de l'utilisation de variables non définies et le suivi de l'exécution des commandes.

Fonctionnalités principales

  • Définir et désactiver les options du shell
  • Définir les paramètres positionnels
  • Aide au débogage de scripts

Options principales

La commande `set` propose diverses options à caractère unique et des options à nom long via l'option `-o`. Voici les options fréquemment utilisées.

Options de contrôle de script

Options -o (noms longs)

Commande générée :

Essayez de combiner les commandes.

Description:

`set` Exécute la commande.

Essayez d'exécuter virtuellement les commandes avec l'IA en combinant les options ci-dessus.

Exemples d'utilisation

Arrêt immédiat du script en cas d'erreur

#!/bin/bash
set -e

echo "Début"
false # Cette commande retourne un code de sortie non nul.
echo "Ce message ne sera pas affiché."

Configure le script pour qu'il s'arrête immédiatement en cas d'erreur.

Génération d'une erreur lors de l'utilisation d'une variable non définie

#!/bin/bash
set -u

echo "Début"
echo "$UNDEFINED_VAR" # Cette variable n'est pas définie, donc une erreur se produira.

Fait en sorte que le script s'arrête lors de la tentative d'utilisation d'une variable non initialisée.

Suivi de l'exécution des commandes (débogage)

#!/bin/bash
set -x

VAR="Hello"
echo "$VAR World"
ls -l /tmp

Affiche toutes les commandes exécutées par le script, ce qui aide au débogage.

Détection d'erreurs dans les pipelines

#!/bin/bash
set -o pipefail

echo "Début"
false | echo "Ce message sera affiché, mais le script sera considéré comme échoué."
# Si set -e est également utilisé, le script s'arrêtera à false.

Fait en sorte que l'ensemble du pipeline soit considéré comme échoué si une commande intermédiaire dans le pipeline échoue.

Combinaison fréquente et puissante

set -euo pipefail

Une combinaison recommandée pour écrire des scripts shell stables.

Vérification des options du shell actuel

set -o

Vérifie l'état de toutes les options définies dans le shell actuel.

Définition des paramètres positionnels

set -- "pomme" "banane" "cerise"
echo "Premier paramètre : $1"
echo "Tous les paramètres : $@"

Vous pouvez définir manuellement les paramètres positionnels d'un script ($1, $2, etc.) en utilisant `set --`. Ceci est utile pour les tests ou dans des situations spécifiques.

Conseils et précautions

La commande `set` peut améliorer considérablement la robustesse des scripts shell, mais elle doit être utilisée avec précaution.

Combinaison recommandée

Il est fortement recommandé d'ajouter la combinaison `set -euo pipefail` en haut de la plupart des scripts shell pour améliorer la stabilité.

  • set -e: Arrête immédiatement en cas d'erreur pour éviter un comportement inattendu.
  • set -u: Détecte les bogues potentiels causés par l'utilisation de variables non définies à un stade précoce.
  • set -o pipefail: Détecte les échecs des commandes intermédiaires dans un pipeline pour juger avec précision du succès ou de l'échec de l'ensemble du pipeline.

Désactivation des options

Vous pouvez désactiver des options spécifiques en utilisant `+`, comme `set +e`, `set +u`. Ceci est utile lorsque vous devez modifier temporairement le comportement d'une option uniquement pour une partie spécifique du script. Par exemple, si un script doit continuer à s'exécuter même si une commande échoue, vous pouvez utiliser `set +e`, puis rétablir `set -e` une fois cette opération terminée.

Utilisation pour le débogage

`set -x` est très utile pour le débogage car il affiche en détail le processus d'exécution du script. Il est conseillé de l'ajouter au début du script, puis de le supprimer ou de le commenter une fois le débogage terminé. `set -v` affiche les lignes d'entrée telles quelles, ce qui aide à comprendre le flux du script.

Paramètres positionnels et `--`

`set --` définit tous les arguments suivants comme paramètres positionnels ($1, $2, etc.) et garantit que ces arguments ne sont pas interprétés comme des options, même s'ils commencent par `-`. Ceci est particulièrement important lors de la redéfinition de `$@` ou `$*` dans un script.


Commandes de la même catégorie