Un alias Bash est pour l'essentiel un simple 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 [112] saisi sur la ligne de commande sera automatiquement remplacé par un ls -l | more. Ceci fait économiser beaucoup de temps lors de saisies en ligne de commande et évite 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 empêche l'effacement par inadvertance de fichiers importants.
Dans un script, les alias ont une utilité très limitée. Il serait 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. [113] 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 25.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 25.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