Set
| 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 shellexport— rendre une variable disponible aux processus enfantsshopt— options bash supplémentaires (non couvertes parset -o)