Bashrc
| Fiche express | |
|---|---|
| Domaine | Personnalisation du shell (bash) |
| Fichier | ~/.bashrc
|
| Contexte | Shell interactif non-login (prompt, alias, couleurs) |
| Prise en compte | nouveau shell, ou source ~/.bashrc
|
~/.bashrc est le fichier de configuration exécuté à l'ouverture d'un shell bash
interactif non-login (nouveau terminal, nouvel onglet). C'est l'endroit habituel pour
personnaliser le prompt (PS1), activer la coloration de ls, définir
des alias, ou régler des variables d'environnement propres à l'utilisateur.
Coloration de ls
Sur beaucoup de distributions, la coloration de ls repose sur
dircolors et se configure en ajoutant cette ligne dans ~/.bashrc :
eval "$(dircolors -b)"
Sur les systèmes de type RHEL/CentOS, les alias associés (ls, ll...)
sont généralement centralisés dans un script séparé plutôt que dans le .bashrc de
chaque utilisateur :
vi /etc/profile.d/colorls.sh
Personnaliser le prompt (PS1)
Le prompt par défaut :
PS1='[\u@\h \W]\$'
Rappel des séquences utiles : \u utilisateur, \h nom d'hôte (jusqu'au
premier point), \w répertoire courant complet, \W juste le dernier
composant du chemin, \$ affiche # pour root et $ sinon.
Avec une couleur (codes ANSI 30 à 37 pour la couleur de texte) :
PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '
Astuce pratique pour repérer visuellement l'environnement de connexion : prompt jaune pour un utilisateur normal sur un serveur de prod, prompt rouge pour root — évite de taper une commande destructrice au mauvais endroit par inattention.
# Connexion en production, utilisateur non-root : jaune
PS1='\[\033[00m\][\[\033[01;33m\]\u\[\033[01;00m\]@\[\033[01;33m\]\h\[\033[00m\]:\[\033[01;32m\]\w\[\033[00m\]]\[\033[01m\]\$'
# Connexion en root : rouge
if [ "${UID}" -eq 0 ]; then
PS1='\[\033[01;41;00m\][\[\033[01;33;41m\]\u\[\033[01;41;00m\]@\[\033[01;41;33m\]\h\[\033[01;00m\]:\[\033[01;41;41;32m\]\w\[\033[01;41;00m\]]\[\033[31;01m\]\$'
fi
⚠️ Toujours entourer les séquences d'échappement de couleur avec \[ et
\] dans PS1 (non-imprimables) : sans ça, bash compte mal la longueur
visible du prompt et l'édition de ligne (déplacement du curseur, historique) se dérègle sur les
lignes longues.
Prompt avancé : troncature du chemin courant
Pour éviter un prompt à rallonge dans une arborescence profonde, on peut tronquer le chemin
courant à une longueur maximale via PROMPT_COMMAND, qui exécute une fonction avant
chaque affichage du prompt :
bash_prompt_command() {
# Nombre de caractères du $PWD à conserver
local pwdmaxlen=25
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( pwdmaxlen < ${#dir} ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ "${pwdoffset}" -gt "0" ]; then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
bash_prompt() {
case $TERM in
xterm*|rxvt*) local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]' ;;
*) local TITLEBAR="" ;;
esac
local NONE="\[\033[0m\]"
local R="\[\033[0;31m\]"
local W="\[\033[0;37m\]"
local EMK="\[\033[1;30m\]"
local EMB="\[\033[1;34m\]"
local UC=$W # couleur par défaut : utilisateur normal
[ "$UID" -eq 0 ] && UC=$R # rouge pour root
PS1="$TITLEBAR ${EMK}[${UC}\u${EMK}@${UC}\h ${EMB}\${NEW_PWD}${EMK}]${UC}\\$ ${NONE}"
# sans couleurs : PS1="[\u@\h \${NEW_PWD}]\\$ "
}
PROMPT_COMMAND=bash_prompt_command
bash_prompt
unset -f bash_prompt
Titre de la fenêtre du terminal
Indépendamment du prompt, on peut pousser le répertoire courant (ou toute info) dans le titre
de la fenêtre/onglet du terminal (xterm et dérivés) via une séquence d'échappement dans
PROMPT_COMMAND :
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
Coloration des pages man
Le paquet most fournit un pager qui colorise les pages de manuel (au lieu du
less par défaut, monochrome) :
# RHEL/CentOS
yum install most
echo "export MANPAGER=most" >> ~/.bashrc
# Debian/Ubuntu
aptitude install most
update-alternatives --config pager
Sous Debian/Ubuntu, update-alternatives --config pager permet de choisir
most comme pager par défaut du système sans passer par une variable
d'environnement.