Linux / Commande unalias : retirer un alias et éviter son retour

unalias nom retire un alias du Bash courant ; unalias -a les retire tous dans ce shell. Pour qu’un alias ne revienne pas dans une nouvelle session, il faut aussi supprimer ou neutraliser sa définition dans le fichier de démarrage qui le recrée : unalias ne modifie pas ce fichier.

Inspecter puis retirer un alias précis

Un alias associe un nom à un texte substitué lors de la lecture d’une commande. Le guide de création et de conservation des alias Bash explique ce mécanisme. Avant de retirer un raccourci, vérifiez que vous avez bien identifié un alias et sa définition :

alias jb_ll
type -a jb_ll

Si jb_ll existe et que vous voulez le retirer de la session :

unalias jb_ll

Vérifiez ensuite avec alias jb_ll et type -a jb_ll. Une absence d’alias produit normalement un diagnostic et un statut non nul pour la première vérification. La seconde peut encore trouver une fonction ou un fichier de ce nom : la suppression d’un alias ne supprime pas les autres candidats.

Les formes principales sont :

unalias nom [nom ...]
unalias -a

Cette page concerne Bash. La référence officielle des commandes internes Bash décrit unalias et son statut de retour ; un autre shell peut avoir des particularités différentes.

Comprendre ce qui reste après la suppression

L’exercice complet suivant crée un alias et une fonction de même nom dans un sous-shell, puis retire seulement l’alias. Il n’altère pas les définitions de votre session parente :

(
  shopt -s expand_aliases
  function jb_demo {
    builtin printf '%s\n' 'Fonction toujours présente'
  }
  alias jb_demo='printf "%s\n" "Alias"'
  type -t jb_demo
  unalias jb_demo
  type -t jb_demo
)

Les catégories attendues sont :

alias
function

Après unalias, la fonction existe toujours. Le corps de cette fonction n’est pas appelé par type : l’exercice observe la résolution sans exécuter le nom recherché. Pour examiner les candidats d’une commande réelle, utilisez le guide de type et de ses options.

Objet Commande correspondante dans Bash Vérification
Alias unalias nom alias nom et type nom.
Fonction unset -f nom declare -F nom et type nom.
Variable unset -v nom, si elle peut être retirée. declare -p nom.
Fichier exécutable Pas de suppression par unalias. Recherche des chemins avec type, sans modifier le fichier.

Retirez uniquement l’objet identifié. Une variable en lecture seule peut notamment refuser une suppression. Effacer un fichier ou une fonction pour corriger un simple alias serait une modification différente du besoin initial.

Retirer plusieurs alias ou les examiner sans aucun alias

Une erreur ne signifie pas qu’aucune suppression n’a eu lieu

unalias jb_ll jb_gs jb_dfh

Bash essaie de retirer les noms fournis. Si l’un d’eux n’est pas un alias existant, la commande renvoie un échec, alors que d’autres alias de la liste peuvent avoir été retirés. Cette opération n’est pas une transaction annulant tous les changements au premier nom absent. Vérifiez les noms concernés si vous avez besoin d’un état précis.

Pour retirer un nom uniquement lorsqu’il est défini, ce bloc complet peut être utilisé dans un réglage Bash :

if builtin alias jb_ll >/dev/null 2>&1; then
  builtin unalias jb_ll
fi

builtin impose ici les commandes internes plutôt que des fonctions de même nom. Le contrôle n’analyse pas un message traduit. Un script non interactif ne développe normalement pas les alias, mais peut tout de même contenir ou consulter leur table ; son état n’est pas automatiquement celui du terminal parent.

Limiter un essai global à un sous-shell

unalias -a retire toutes les définitions de la table du shell qui l’exécute. Pour observer la résolution de ls sans conserver cette suppression dans votre session :

(
  unalias -a
  type -a ls
)

À la fin des parenthèses, la table du shell parent reste disponible. Cet exemple inspecte un nom ; des commandes déjà lues dans un bloc peuvent avoir subi l’expansion de leurs alias avant son exécution. La documentation des alias Bash explique cette distinction entre lecture et exécution.

Si vous comptez réellement retirer tous les alias du shell courant, conservez d’abord les définitions que vous souhaitez pouvoir remettre. Ce bloc crée un nouveau fichier de sauvegarde avec des permissions limitées, sans écraser un fichier existant :

(
  umask 077
  set -o noclobber
  builtin alias -p > alias-sauvegarde.bash
)

Vérifiez que le bloc a réussi et examinez le contenu avant une suppression globale. Si le fichier existe déjà, choisissez un autre nom ; si une erreur d’écriture survient, ne considérez pas un fichier partiel comme une sauvegarde valide. Le sous-shell copie ici la table à exporter ; il ne retire aucun alias.

Une sauvegarde que vous avez créée et vérifiée peut ensuite réintroduire les définitions enregistrées :

source ./alias-sauvegarde.bash

Cette lecture exécute le contenu du fichier comme du code Bash. Elle remet les définitions sauvegardées et peut remplacer des alias de même nom, mais ne supprime pas ceux ajoutés depuis : ce n’est pas nécessairement une restauration exacte de toute la table. Il n’existe pas de commande générale annulant un unalias -a lorsque les définitions n’ont été conservées nulle part.

Empêcher l’alias de revenir dans un nouveau terminal

Une suppression en mémoire n’agit pas sur les autres shells déjà ouverts. Une nouvelle session peut recréer l’alias à partir de ses fichiers de démarrage. Commencez par rechercher son nom dans les fichiers personnels habituels, en adaptant jb_ll à votre cas :

for alias_config in "$HOME/.bashrc" "$HOME/.bash_aliases" \
                    "$HOME/.bash_profile" "$HOME/.bash_login" "$HOME/.profile"; do
  if [ -f "$alias_config" ]; then
    grep -nH -F -- 'jb_ll' "$alias_config"
  fi
done

Cette recherche indique des lignes candidates, pas une preuve exhaustive de l’origine. La définition peut être répartie, générée ou chargée depuis un autre fichier. Suivez les lectures avec source ou . présentes dans votre configuration ; une définition plus tardive peut remplacer une définition précédente.

Pour un Bash interactif ordinaire non lancé comme shell de connexion, le point d’entrée est généralement ~/.bashrc. Un shell de connexion suit la chaîne des profils personnels, et ~/.bash_aliases n’est lu que si une configuration le charge. Les règles des fichiers de démarrage Bash permettent d’identifier la chaîne effectivement utilisée.

  1. Gardez la session actuelle ouverte et sauvegardez le fichier à modifier. Avec GNU cp, cp --backup=numbered -- ~/.bashrc ~/.bashrc.before-unalias convient pour un ~/.bashrc existant ; adaptez les chemins si la définition est ailleurs.
  2. Dans votre éditeur, supprimez ou commentez uniquement la définition concernée. Préservez les autres alias, conditions et réglages.
  3. Pour le fichier modifié, vérifiez la syntaxe avec bash -n ~/.bashrc, en adaptant le chemin. Corrigez les diagnostics avant d’ouvrir une nouvelle session.
  4. Retirez aussi l’alias de la session actuelle avec unalias jb_ll, puis ouvrez une nouvelle session et contrôlez séparément son état avec alias jb_ll et type -a jb_ll.

Relire un fichier dont la définition a été supprimée ne retire pas un alias déjà en mémoire. source ~/.bashrc ne remplace donc pas automatiquement le retrait explicite de la session actuelle et exécuterait aussi toutes les autres commandes du fichier.

Si une configuration système recrée l’alias et que vous voulez seulement ajuster votre compte, le bloc conditionnel présenté plus haut peut retirer ce nom dans votre fichier personnel, après le chargement de ses définitions. Vérifiez cet ordre plutôt que modifier un fichier partagé comme /etc/bashrc, /etc/bash.bashrc ou un script de /etc/profile.d pour tous les utilisateurs.

Pour revenir sur votre modification, rétablissez la définition concernée depuis la sauvegarde et vérifiez une nouvelle session. Une restauration complète du fichier doit tenir compte des autres changements qui auraient été faits depuis.

Contourner une seule invocation et diagnostiquer les écarts

Si vous voulez simplement éviter un alias pour une commande, il n’est pas nécessaire de supprimer sa définition. Dans Bash, \ls empêche l’expansion de l’alias de ce mot, mais n’écarte pas une fonction ls. Dans une écriture ordinaire, command ls omet aussi la recherche de fonction ; le guide de command et du contournement des fonctions précise les limites liées au contexte d’analyse.

Un chemin explicite vers un fichier choisi évite la recherche par nom, à condition que ce chemin ait été vérifié sur votre système. Ne supposez pas qu’un chemin copié d’une autre distribution est le bon.

Observation Vérification utile
unalias signale un nom absent. Vérifier alias nom et la catégorie avec type dans ce shell précis.
Le nom désigne encore une commande. Rechercher une fonction, un builtin ou un fichier restant avec type -a nom.
L’alias revient dans un nouveau terminal. Suivre les fichiers de démarrage et les définitions successives.
Les autres terminaux conservent l’alias. Chaque shell possède son état ; vérifier et retirer la définition dans chaque session nécessaire.
Une commande déjà analysée semble garder l’ancien effet. Revenir à une invite suivante pour que la nouvelle ligne soit lue après le retrait.

Lorsque le comportement reste inattendu, vérifiez les candidats et le contexte d’exécution avant d’élargir la suppression. Un alias retiré ne corrige pas automatiquement une fonction de même nom ou un autre exécutable trouvé dans PATH.