24. Alias

Un alias Bash n'est essentiellement rien de plus qu'un raccourci clavier, une abréviation, un moyen d'éviter de taper une longue séquence de commande. Si, par exemple, nous incluons alias lm="ls -l | more" dans le fichier ~/.bashrc, alors chaque lm saisi sur la ligne de commande sera automatiquement remplacé par un ls -l | more. Ceci peut économiser beaucoup de temps lors de saisies en ligne de commande et éviter d'avoir à se rappeler des combinaisons complexes de commandes et d'options. Disposer de alias rm="rm -i" (suppression en mode interactif) peut vous empêcher de faire des bêtises car il prévient la perte par inadvertance de fichiers importants.

Dans un script, les alias ont une utilité très limitée. Il serait assez agréable que les alias assument certaines des fonctionnalités du préprocesseur C, telles que l'expansion de macros, mais malheureusement Bash ne supporte pas l'expansion d'arguments à l'intérieur du corps des alias. [80] Pire encore, un script échoue à étendre un alias lui-même à l'intérieur d'une « construction composée », telle que les instructions if/then, les boucles et les fonctions. Une limitation supplémentaire est qu'un alias ne peut être étendu récursivement. De façon pratiquement invariable, tout ce que nous voudrions que les alias puissent faire est faisable bien plus efficacement avec une fonction.

Exemple 24.1. Alias à l'intérieur d'un script

#!/bin/bash
#  alias.sh

shopt -s expand_aliases
# Cette option doit être activée, sinon le script n'étendra pas les alias.


# Tout d'abord, un peu d'humour.
alias Jesse_James='echo "\"Alias Jesse James\" était une comédie de 1959 avec Bob Hope."'
Jesse_James

echo; echo; echo;

alias ll="ls -l"
#  Vous pouvez utiliser soit les simples guillemets (') soit les doubles (") pour définir
#+ un alias.

echo "Essai de l'alias \"ll\" :"
ll /usr/X11R6/bin/mk*   #* L'alias fonctionne.

echo

repertoire=/usr/X11R6/bin/
prefixe=mk*  # Voir si le caractère joker va causer des problèmes.
echo "Les variables \"repertoire\" + \"prefixe\" = $repertoire$prefixe"
echo

alias lll="ls -l $repertoire$prefixe"

echo "Essai de l'alias \"lll\":"
lll         # Longue liste de tous les fichiers de /usr/X11R6/bin commençant avec mk.
# Les alias peuvent gérer les variables concaténées -- incluant les caractères joker.




VRAI=1

echo

if [ VRAI ]
then
  alias rr="ls -l"
  echo "Essai de l'alias \"rr\" à l'intérieur d'une instruction if/then :"
  rr /usr/X11R6/bin/mk*   #* Message d'erreur !
  # Les alias ne sont pas étendus à l'intérieur d'instructions composées.
  echo "Néanmoins, l'alias précédemment étendu est toujours reconnu :"
  ll /usr/X11R6/bin/mk*
fi  

echo

nombre=0
while [ $nombre -lt 3 ]
do
  alias rrr="ls -l"
  echo "Essai de l'alias \"rrr\" à l'intérieur de la boucle \"while\":"
  rrr /usr/X11R6/bin/mk*   #* L'alias ne sera pas étendu ici non plus.
                           #  alias.sh: line 57: rrr: command not found
  let nombre+=1
done 

echo; echo

alias xyz='cat $0'   # Le script se liste lui-même.
                     # Notez les simples guillemets.
xyz
#  Ceci semble fonctionne,
#+ bien que la documentation Bash suggère que cela ne le devrait pas.
#
#  Néanmoins, comme l'indique Steve Jacobson,
#+ le paramètre "$0" s'étend tout de suite après la déclaration de l'alias.

exit 0

La commande unalias supprime un alias précédemment configuré.

Exemple 24.2. unalias : Configurer et supprimer un alias

#!/bin/bash
# unalias.sh

shopt -s expand_aliases  # Active l'expansion d'alias.

alias llm='ls -al | more'
llm

echo

unalias llm              # Supprime la configuration de l'alias.
llm
# Résulte en un message d'erreur car 'llm' n'est plus reconnu.

exit 0

bash$ ./unalias.sh

total 6
drwxrwxr-x    2 bozo     bozo         3072 Feb  6 14:04 .
drwxr-xr-x   40 bozo     bozo         2048 Feb  6 14:04 ..
-rwxr-xr-x    1 bozo     bozo          199 Feb  6 14:04 unalias.sh

./unalias.sh: llm: command not found



[80] Néanmoins, les alias semblent étendre les paramètres de position.