Chapitre 13. Alias

Table des matières

13.1. Création d’un alias
13.2. Suppression d’un alias
13.3. Utilisation des alias

Un alias permet d'abréger une longue commande, de remplacer le nom d’une commande existante par un autre nom ou bien de modifier le comportement d’une commande existante. De manière plus générale, un alias est utilisé pour remplacer une longue chaîne de caractères par une chaîne plus courte.

Pour connaître l’ensemble des alias définis, on utilise la commande alias sans argument.

$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
$

Pour connaître la valeur d’un ou plusieurs alias : alias nom …

$ alias ll
alias ll='ls -alF'
$

13.1. Création d’un alias

Pour créer un ou plusieurs alias, on utilise la syntaxe : alias nom =valeur ...

$ alias cx=’chmod u+x’
$

Le nom de l’alias peut être présent dans sa propre définition. La commande alias rm='rm -i' redéfinit le comportement par défaut de la commande unix rm en demandant à l’utilisateur de confirmer la suppression (on force l’utilisateur à utiliser l’option -i).

$ alias rm='rm -i'
$
$ > err    => création du fichier err
$
$ rm err
rm : supprimer fichier vide «err» ? o		=> l’alias rm demande confirmation
$
$ ls err	=> le fichier err a été supprimé
ls: impossible d'accéder à err: Aucun fichier ou dossier de ce type
$

Si l’on souhaite temporairement obtenir le fonctionnement originel de la commande unix rm , il suffit de placer le caractère \devant l’alias.

$ > err		=> création du fichier err
$
$ \rm err		=> fonctionnement standard de rm
$
$ ls err
ls: impossible d'accéder à err: Aucun fichier ou dossier de ce type
$

Attention : on ne doit pas définir un alias et utiliser cet alias dans la même ligne mais sur deux lignes différentes.

$ alias aff='echo bonjour' ; aff tout le monde
Commande « aff » non trouvée, vouliez-vous dire :
 La commande « apf » issue du paquet « apf-firewall » (universe)
 La commande « caff » issue du paquet « signing-party » (universe)
 La commande « aft » issue du paquet « aft » (universe)
aff : commande introuvable	=>  aff tout le monde  n’a pu s’exécuter !
$
$ aff la compagnie
bonjour la compagnie   	=>  l’alias est connu 
$

Si l'on désire utiliser plusieurs alias dans la même commande, il est nécessaire de laisser un caractère espace ou tabulation comme dernier caractère de valeur.

$ cat /etc/debian_version
wheezy/sid	
$
$ alias c=cat d=/etc/debian_version
$
$ c d
cat: d: Aucun fichier ou répertoire de ce type
$

Dans l’exemple ci-dessus, l’alias d n’a pas été interprété car le dernier caractère de la valeur de c n’est ni un espace, ni une tabulation. En ajoutant un caractère espace, on obtient le résultat voulu.

$ alias c='cat '
$
$ c d
wheezy/sid	
$

La valeur d’un alias peut inclure plusieurs commandes.

$ pwd
/tmp                               => répertoire courant
$ alias scd='echo salut ; cd '     => après cd il y a un caractère espace
$ alias rep=/home/sanchis/bin
$
$ scd rep
salut
$ pwd
/home/sanchis/bin                  => nouveau répertoire courant
$

La protection de la valeur d’un alias doit être choisie judicieusement. Définissons un alias affichant l’heure courante. La suite de commandes à exécuter est la suivante :

set $(date) ; echo ${5%:*}

Cette suite de commandes peut être entourée avec des caractères quote ou bien avec des caractères guillemet.

$ date
lundi 24 février 2014, 17:15:50 (UTC+0100)
$
$ alias h='set $(date) ; echo ${5%:*}'
$
$ h
17:19
$
$ sleep 60
...     => attente de 60 secondes
$ h
17:20			=> mise à jour de l’heure
$

Attention : en entourant la suite de commandes avec des caractères guillemet, le shell exécute les substitutions avant d’affecter la valeur à l’alias, puis interprète cet alias.

$ alias g="set $(date) ; echo ${5%:*}"
$
$ g
bash: Erreur de syntaxe près du symbole inattendu « ( »
$

C’est la présence de la parenthèse ouvrante de la chaîne de caractères :

set  lundi 24 février 2014, 17:15:50  (UTC+0100)

Cette chaîne est exécutée comme une commande par le shell, ce qui provoque l’erreur.