Customiser son bashrc

Table des Matières

Un utilisateur Linux se doit, s’il souhaite comprendre et bidouiller son OS, de maîtriser un tant soit-peu la ligne de commande. Dans la plupart des distributions le shell installé de base est bash mais il en existe d’autres comme fish et zsh. Ce dernier est très populaire et permet d’étendre les fonctionnalités disponibles dans le terminal. On peut notamment citer la colorisation syntaxique (pratique pour voir si la commande est erronée ou non), un indicateur de statut git ou encore la possibilité de se balader dans les dossiers et fichiers intuitivement et l’affichage d’explications pour les commandes avec l’auto-complétion.
Mais revenons à notre vénérable bash qui demande tout de même de le comprendre un minimum avant de penser à passer sous un autre shell.

Utiliser le terminal peut s’avérer assez ardu au départ et il est intéressant de fouiner sur le net pour ajouter des éléments au fichier de configuration bashrc régissant notre vie en ligne de commande avec Bash. Voici donc quelques additions possibles.

Toutes ses modifications sont à apporter au fichier .bashrc se situant de votre répertoire $HOME. (/home/batman/ si vous vous appelez Bruce.)
Captures d’écran en fin de billet.

Les aliases

Les aliases sont très pratiques, car elles permettent de contenir des commandes en un simple mot ou suite de lettres pour les plus farfelus. Pratique donc quand il s’agit d’opération que l’on répète souvent.
Pour naviguer dans la hiérarchie de notre OS on utilise la commande cd en ligne de commande. Pour aller dans mon dossier Musique je lance donc la commande cd Musique/, simple. Mais la tâche se complique un peu quand on souhaite revenir dans un dossier parent, voir même deux dossiers au-dessus. Là il faut utiliser cd .. puis cd ../../ et ce n’est pas très pratique à la longue. Voilà donc quelques aliases pour se faciliter la vie.

alias ..="cd .."
alias ...="cd ../../"
alias ....="cd ../../../"
alias .....="cd ../../../../"

Et si jamais vous souhaitez avoir la météo en ligne de commande c’est également possible avec alias weather='curl wttr.in'. La commande se chargera toute seule de géolocaliser votre position par le biais de votre réseau.

PS: Ouvrir les volets est une solution possiblement acceptable également.

Extraire des archives

Encore une tâche qui peut s’avérer pénible, surtout vu le nombre de formats utilisés.

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
}

Coloriser la documentation man

En début d’article je disais que Zsh pouvait afficher directement dans votre invité de commande la description des commandes ou paramètres possibles pour ces dernières. De ce que je connais de Bash pour le moment une telle fonctionnalité n’existe pas mais, le monde linuxien a toujours une solution et il est possible d’utiliser la commande man pour afficher la documentation écrite par les développeurs pour la commande ou le logiciel utilisé. Une commande universelle, fonctionnant sur tous les systèmes. Le confort de lecture est mieux si on ajoute un peu de mise en forme.

export PAGER="less"
export LESS_TERMCAP_mb=$'\e[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\e[1;33m'     # begin blink
export LESS_TERMCAP_so=$'\e[01;44;37m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;37m'    # begin underline
export LESS_TERMCAP_me=$'\e[0m'        # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m'        # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m'        # reset underline
export GROFF_NO_SGR=1                  # for konsole and gnome-terminal

Il est possible d’utiliser le pager Most qui colorise automatiquement les pages man.

Convertir la documentation man en pdf

On ne s’est jamais, si vous n’avez pas de bouquins le soir sous la main mais que vous voulez tout de même lire avant de vous endormir.

manpdf () {
    man -t "${1}" | ps2pdf - > "${1}".pdf
}

Le prompt

Et enfin le plus important si vous apportez une importance toute particulière au look de votre OS, le prompt. Cela peut paraître futile, mais il est important d’avoir un prompt avec lequel on se sent à l’aise pour travailler un minimum sinon c’est rapidement gonflant.

Voici le mien.

GREY="\[\e[0;37m\]"
BLUE="\[\e[0;36m\]"
RESET="\[\e[0m\]"
export PS1="${GREY}[\u@\h ${BLUE}\w${GREY}]\$(markup_git_branch \$(git_branch)) \n${BLUE} ${RESET}"

Avec en plus un indicateur pour savoir si un répertoire git est synchronisé ou non.

function git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (*\([^)]*\))*/\1/'
}

function markup_git_branch {
  if [[ -n $@ ]]; then
    if [[ -z $(git status --porcelain 2> /dev/null | tail -n1) ]]; then
      echo -e " \001\033[32m\002($@)\001\033[0m\002"
    else
      echo -e " \001\033[31m\002($@*)\001\033[0m\002"
    fi
  fi
}