Set

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Shell (options et variables du shell)
Commande set
Contexte Builtin bash/sh — scripts et sessions interactives
Voir aussi unset, export, shopt

set est une commande interne (builtin) du shell qui active/désactive les options du shell et gère les paramètres positionnels ($1, $2...). Sans argument, elle affiche toutes les variables et fonctions actuellement définies dans le shell.

Afficher les variables et fonctions du shell

set                 # liste toutes les variables et fonctions du shell courant

Activer / désactiver une option

Convention à contre-intuitive : le signe - active une option, le signe + la désactive.

set -o                # liste toutes les options avec leur état (on/off)
set +o                # idem, mais sous forme de commandes set réutilisables (copier/coller)
set -o allexport       # exporte automatiquement toute variable créée par la suite (équivalent set -a)
set +o allexport       # désactive l'export automatique

Options courantes en script (robustesse)

Combinaison classique en tête de script pour arrêter au premier incident plutôt que de continuer sur une erreur silencieuse :

set -e                 # quitte le script dès qu'une commande retourne un code d'erreur != 0
set -u                 # erreur si une variable non définie est utilisée (au lieu de la traiter comme vide)
set -o pipefail        # un pipeline échoue si une seule des commandes qui le composent échoue
set -euo pipefail       # les trois combinés, en tête de script

Débogage

set -x                 # affiche chaque commande avant exécution (trace)
set -v                 # affiche chaque ligne du script telle que lue (verbose)
set -xv                # les deux combinés — mode debug le plus verbeux
set +x                 # désactive la trace

Mode d'édition de la ligne de commande

set -o emacs            # raccourcis clavier façon emacs (défaut de bash)
set -o vi               # raccourcis clavier façon vi

Protéger les redirections (noclobber)

Empêche > d'écraser un fichier existant (il faut alors forcer avec >|) :

set -o noclobber        # active la protection
set +o noclobber        # désactive la protection

Réassigner les paramètres positionnels

set -- permet de remplacer $1, $2... par une nouvelle liste, utile pour découper une chaîne ou repasser des arguments filtrés à un script :

set -- a b c            # $1=a $2=b $3=c
echo "$#"                # nombre de paramètres : 3
set -- $(date)           # éclate la sortie de `date` en paramètres positionnels

Désactiver temporairement l'historique

Pour qu'une commande sensible (mot de passe en clair sur la ligne de commande, par exemple) n'apparaisse pas dans ~/.bash_history :

unset HISTFILE          # désactive l'écriture de l'historique pour la session courante
set HISTFILE=~/.bash_history   # la réactive (ou ouvrir un nouveau shell)

Voir aussi

  • unset — supprimer une variable ou une fonction du shell
  • export — rendre une variable disponible aux processus enfants
  • shopt — options bash supplémentaires (non couvertes par set -o)