Personnaliser le shell bash : alias, historique, prompt
Table des matières
Le shell (bash ou autre) est personnalisable via un fichier de configuration.
Pour BASH, il s'agit du fichier .bashrc. Il se situe dans le dossier ~/.bashrc. Il est lu à chaque exécution du shell.
On pourra ajouter dans ce fichier des alias, des fonctions, des modifications du prompt.
Après modification du fichier ~/.bashrc, pour le prendre en compte :
En Bash, un alias peut être considéré comme une sorte de raccourci de ligne de commande, qu'il s'agisse d'une commande ou une séquence de commandes plus longue.
Ils peuvent nous être utile surtout sur des commandes qu'on va fréquemment exécuter pour en simplifier l'utilisation.
Pour lister les alias créés sur le système :
Il est possible de créer un alias comme ceci :
Par exemple :
Ainsi, en invoquant l'alias maj, appelé comme une commande classique (l'auto-complétion fonctionne), le shell exécutera la commande sudo dnf upgrade.
Après avoir défini un alias, il est possible de supprimer un alias avec la commande unalias :
Exemple pour supprimer l'alias maj :
Dans le cas où un alias porte le même nom qu'une commande sur votre système, on peut appeler la commande originale en faisant précéder celle-ci d'un anti-slash.
Sur beaucoup de systèmes, vous aurez ce type d'alias :
Ici, un alias grep appelle la commande grep avec l'option color. Cela permet d'avoir la coloration par défaut en invoquant la commande grep.
Si on souhaite utiliser grep la commande et non l'alias, voici un exemple d'utilisation :
Il existe des variables spécifiques qui permettent de personnaliser le comportement de la commande history.
Par défaut la commande history affiche le numéro de la commande et la commande saisie, dans une limite de 500 ou 1000 entrées.
Exemple :
On a la variable HISTTIMEFORMAT qui permet de définir une date et heure d'exécution de chacune des commandes dans l'historique (n'est pas rétroactif) :
Notons le résultat si on invoque :
On a la variable HISTSIZE qui permet de définir le nombre de commandes présentes dans l'historique. Pour augmenter l'historique à 5000 entrées :
Ces variables sont à positionner dans le fichier ~/.bashrc pour que le paramétrage souhaité soit persistant.
Il existe beaucoup d'autres variables permettant de modifier le comportement de l'historique dans bash.
Pour plus d'infos, chercher HIST dans la page de manuel de bash :
Le prompt est personnalisable directement dans le fichier .bashrc.
La définition de l'affichage du prompt est définie par la variable $PS1.
Le prompt par défaut est souvent défini par cette forme :
On remarquera qu'il y a des symboles spéciaux échappés par le caractère backslash.
Voici un petit tableau récapitulatif des caractères utilisables :
On peut en plus ajouter des couleurs avec les codes suivant spéciaux :
Voici à titre indicatif les valeurs qui fonctionnent (testées avec bash 5.2.21 sur Fedora 39) :
Pour combiner les styles, les séparer par un point virgule : 1;32;44m (gras + vert + fond bleu)
Voici quelques exemples de personnalisation possibles :
Afficher l'utilisateur, l'hôte et le répertoire :
Ajouter une couleur verte au prompt (la commande est en couleur normale après) :
Afficher un symbole dans le prompt :
Afficher un état du code retour en couleur de la dernière commande :
On peut tester à la volée le prompt en redéfinissant la variable PS1.
Si on souhaite garder les modifications, on complètera le fichier .bashrc avec notre nouvelle variable PS1.
Pour info, voici mon prompt, que j'ai créé depuis très longtemps pour mon utilisateur :
Et pour root :
Le répertoire /etc/profile.d est utilisé pour stocker des scripts shell qui sont exécutés automatiquement lorsqu'un utilisateur se connecte à un système Linux.
Ces scripts sont généralement utilisés pour définir des variables d'environnement, des configurations ou effectuer d'autres tâches liées à l'initialisation de l'environnement utilisateur.
On peut sans soucis déposer des scripts perso dedans.
Pour qu'ils soient invoqués, ces scripts n'ont pas l'obligation d'être exécutables, cependant ils doivent porter l'extension .sh
A noter que dans tous les cas, les modifications dans le fichier ~/.bashrc resteront prioritaires sur les scripts.
Par exemple, pour créer un prompt simple, vert en tant qu'utilisateur classique et rouge pour le super utilisateur, on pourrait créer le script suivant :
Un simple test sur le UID permet d'afficher en rouge si on est root (UID=0) et sinon en vert :
Introduction
Le shell (bash ou autre) est personnalisable via un fichier de configuration.
Pour BASH, il s'agit du fichier .bashrc. Il se situe dans le dossier ~/.bashrc. Il est lu à chaque exécution du shell.
On pourra ajouter dans ce fichier des alias, des fonctions, des modifications du prompt.
Après modification du fichier ~/.bashrc, pour le prendre en compte :
Code BASH :
source ~/.bashrc
Les alias
En Bash, un alias peut être considéré comme une sorte de raccourci de ligne de commande, qu'il s'agisse d'une commande ou une séquence de commandes plus longue.
Ils peuvent nous être utile surtout sur des commandes qu'on va fréquemment exécuter pour en simplifier l'utilisation.
Pour lister les alias créés sur le système :
Code BASH :
alias
Il est possible de créer un alias comme ceci :
Code BASH :
alias monalias="commandes"
Par exemple :
Code BASH :
alias maj="sudo dnf upgrade"
Ainsi, en invoquant l'alias maj, appelé comme une commande classique (l'auto-complétion fonctionne), le shell exécutera la commande sudo dnf upgrade.
Après avoir défini un alias, il est possible de supprimer un alias avec la commande unalias :
Code BASH :
unalias monalias
Exemple pour supprimer l'alias maj :
Code BASH :
unalias maj
Dans le cas où un alias porte le même nom qu'une commande sur votre système, on peut appeler la commande originale en faisant précéder celle-ci d'un anti-slash.
Sur beaucoup de systèmes, vous aurez ce type d'alias :
Code BASH :
alias grep='grep --color=auto'
Ici, un alias grep appelle la commande grep avec l'option color. Cela permet d'avoir la coloration par défaut en invoquant la commande grep.
Si on souhaite utiliser grep la commande et non l'alias, voici un exemple d'utilisation :
Code BASH :
\grep NAME /etc/os-release
Personnalisation de l'historique
Il existe des variables spécifiques qui permettent de personnaliser le comportement de la commande history.
Par défaut la commande history affiche le numéro de la commande et la commande saisie, dans une limite de 500 ou 1000 entrées.
Exemple :
Code BASH :
997 less /etc/sudoers 998 less /etc/group 999 exit 1000 history
On a la variable HISTTIMEFORMAT qui permet de définir une date et heure d'exécution de chacune des commandes dans l'historique (n'est pas rétroactif) :
Code BASH :
HISTTIMEFORMAT="%F %T "
Notons le résultat si on invoque :
Code BASH :
1002 2024-01-18 18:52:21 ls 1003 2024-01-18 18:52:29 cd /var/tmp 1004 2024-01-18 18:52:31 ls 1005 2024-01-18 18:52:35 systemctl status sshd 1006 2024-01-18 18:52:39 history
On a la variable HISTSIZE qui permet de définir le nombre de commandes présentes dans l'historique. Pour augmenter l'historique à 5000 entrées :
Code BASH :
HISTSIZE=5000
Ces variables sont à positionner dans le fichier ~/.bashrc pour que le paramétrage souhaité soit persistant.
Il existe beaucoup d'autres variables permettant de modifier le comportement de l'historique dans bash.
Pour plus d'infos, chercher HIST dans la page de manuel de bash :
Code BASH :
man bash
Personnalisation du prompt
Le prompt est personnalisable directement dans le fichier .bashrc.
La définition de l'affichage du prompt est définie par la variable $PS1.
Le prompt par défaut est souvent défini par cette forme :
Code BASH :
[\u@\h \W]\$
On remarquera qu'il y a des symboles spéciaux échappés par le caractère backslash.
Voici un petit tableau récapitulatif des caractères utilisables :
Code BASH : \u |
Nom d'utilisateur actuel |
Code BASH : \$ |
Indique le statut : $ pour utilisateur et # pour root |
Code BASH : \h |
Nom d'hôte court |
Code BASH : \H |
Nom d'hôte complet |
Code BASH :
|
Chemin complet du répertoire de travail |
Code BASH : \W |
Nom du répertoire de travail sans le chemin |
Code BASH : \d |
Date au format Joursemaine Mois Jour |
Code BASH : \t |
Heure au format 24h hh:mm:ss |
Code BASH : \T |
Heure au format 12h hh:mm:ss |
Code BASH :
|
Heure au format 12h avec AM/PM |
Code BASH :
|
Numéro de commande dans la session |
Code BASH :
|
Numéro de commande dans l'historique |
Code BASH : \n |
Nouvelle ligne |
Code BASH : \e |
Echappement |
On peut en plus ajouter des couleurs avec les codes suivant spéciaux :
Code BASH : \[\e[32m\] |
Début de couleur verte |
Code BASH : \[\e[31m\] |
Début de couleur rouge |
Code BASH : \[\e[44m\] |
Début surligné bleu |
Code BASH : \[\e[01m\] |
Début de caractères en gras |
Code BASH : \[\e[1;31m\] |
Début de caractères en gras et rouge |
Code BASH : \[\e[1;32;44m\] |
Début de gras, en vert surligné en bleu |
Code BASH : \[\e[0m\] |
Fin de la couleur |
Voici à titre indicatif les valeurs qui fonctionnent (testées avec bash 5.2.21 sur Fedora 39) :
- Couleur du texte : 30m noir, 31m rouge, 32m vert, 33m jaune, 34m bleu, 35m magenta, 36m cyan, 37m blanc
- Fond de texte : 40m noir, 41m rouge, 42m vert, 43m jaune, 44m bleu, 45m magenta, 46m cyan, 47m blanc
- Style de texte : 1m gras, 3m italique, 4m souligné
Pour combiner les styles, les séparer par un point virgule : 1;32;44m (gras + vert + fond bleu)
Voici quelques exemples de personnalisation possibles :
Afficher l'utilisateur, l'hôte et le répertoire :
Code BASH :
PS1='\u@\h:\w\$ '
Ajouter une couleur verte au prompt (la commande est en couleur normale après) :
Code BASH :
PS1='\[\e[32m\]\u@\h:\w\$\[\e[0m\] '
Afficher un symbole dans le prompt :
Code BASH :
PS1='\u@\h \w ➜ '
Afficher un état du code retour en couleur de la dernière commande :
Code BASH :
PS1='\u@\h:\w \[$(if [ $? -eq 0 ]; then echo "\[\e[32m\]✔"; else echo "\[\e[31m\]✘"; fi)\] \$ \[\e[0m\]'
On peut tester à la volée le prompt en redéfinissant la variable PS1.
Si on souhaite garder les modifications, on complètera le fichier .bashrc avec notre nouvelle variable PS1.
Pour info, voici mon prompt, que j'ai créé depuis très longtemps pour mon utilisateur :
Code BASH :
PS1="\[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;32m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;32m\] \$\[\e[0;m\] "
Et pour root :
Code BASH :
PS1="\[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;31m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;31m\] \$\[\e[0;m\] "
Charger des scripts personnalisés
Le répertoire /etc/profile.d est utilisé pour stocker des scripts shell qui sont exécutés automatiquement lorsqu'un utilisateur se connecte à un système Linux.
Ces scripts sont généralement utilisés pour définir des variables d'environnement, des configurations ou effectuer d'autres tâches liées à l'initialisation de l'environnement utilisateur.
On peut sans soucis déposer des scripts perso dedans.
Pour qu'ils soient invoqués, ces scripts n'ont pas l'obligation d'être exécutables, cependant ils doivent porter l'extension .sh
A noter que dans tous les cas, les modifications dans le fichier ~/.bashrc resteront prioritaires sur les scripts.
Par exemple, pour créer un prompt simple, vert en tant qu'utilisateur classique et rouge pour le super utilisateur, on pourrait créer le script suivant :
Code BASH :
vi /etc/profile.d/colorprompt.sh
Un simple test sur le UID permet d'afficher en rouge si on est root (UID=0) et sinon en vert :
Code BASH :
if [[ "$UID" -eq "0" ]] then PS1="\[\e[01;31m\]\u@\h\[\e[01;34m\] \w \$\[\e[00m\] " else PS1="\[\e[01;32m\]\u@\h\[\e[01;34m\] \w \$\[\e[00m\] " fi