Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le juin 7, 2023 Temps de lecture: 10 min

Me suivre sur Mastodon

Bien Configurer Son Terminal Bash

thumbnail for this post

C’est bien plus agréable de travailler avec un terminal qui en jette et qui soit simple à configurer. Alors voilà comment je m’y prends.

Les anciens qui utilisent Windows n’arrivent pas à nous comprendre, nous, Linuxiens et/ou Unixiens (parce que Mac OSX n’est pas en reste). On adore le terminal de commande. Quand on est un débutant, on a l’impression d’être un hacker, et quand on a de l’expérience, on fait à peu près tout et n’importe quoi dessus. On s’abstrait d’énormément d’actions rébarbatives, on automatise des trucs, on se fait nos outils en Bash, etc. En bref, le terminal de commande est incroyable.

Le terminal date des années 60, rendez-vous compte. Une fenêtre généralement noire avec du texte en blanc et voilà, on peut contrôler une machine. Pas besoin de souris (mais en fait on peut), pas besoin d’interface à 200 onglets dans 80 menus… tout est là. On tape une commande et on a ce qu’il faut.

Sauf que voilà, un terminal avec “bash” de base, ça donne pas envie à un novice.

Terminal de base

Heureusement, Bash (mais aussi Zsh, fish etc.) permet de faire plein de choses pour rendre cette interface un peu plus sexy !

Le souci, c’est que l’on trouve pas mal de mauvaises pratiques sur internet en ce qui concerne la configuration. Donc, on va y aller proprement, de manière à ne pas gâcher le plaisirs.

Faisons les choses dans l’ordre.

On commence par avoir une configuration de base claire

Normalement, vous devriez avoir un fichier .bashrc à la racine de votre répertoire utilisateur.

Pour la suite, je vais utiliser le symbole “~” qui est interprété par “bash” comme étant votre répertoire utilisateur. Ainsi, ~/.bashrc est le fichier .bashrc dans votre “HOME”.

Dans ce fichier, si vous n’avez rien fait, voilà ce qu’il doit y avoir:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
	for rc in ~/.bashrc.d/*; do
		if [ -f "$rc" ]; then
			. "$rc"
		fi
	done
fi

unset rc

Si ce n’est pas le cas:

  • Vous êtes sur Ubuntu, et ils ne sont pas du tout un modèle de vertue
  • Vous avez fait une bêtise
  • Vous n’utilisez pas bash…

Dans tous les cas, il serait idéal que ce fichier soit tel quel et de ne rien ajouter dans ce fichier. Car en effet, il est largement suffisant, regardez bien.

Et oui, la partie “User specific aliases and functions” est LA bonne pratique.

Vous l’aurez compris, on peut désormais ajouter des fichier dans un répertoire pour activer, modifier, changer la configuration de notre shell. Cool !

Créez le répertoire ~/.bashrc.d dans lequel on va créer des scripts de configuration.

Et si vous voyez un ami, collègue, membre de la famille, qui n’a pas fait ça, il vous est permis de prendre des airs suffisants et de dire de manière condescendante qu’ils font les choses comme des débutants.

mkdir -p ~/.bashrc.d

On active la “completion”

La completion est un confort d’utilisation sans précédent. La touche “tabulation” (celle qui est à gauche du clavier, représentée par deux flèches qui vont dans les deux sens) va “compléter” la commande ou les options. C’est optionnel, mais je ne connais personne d’humain qui ne l’utilise pas.

Touche tabulation

Donc, on va installer le paquet qui active la “complétion” bash.

# Fedora, Red Hat, etc...
sudo dnf install bash-completion

# Ubuntu, Debian...
sudo apt install bash-completion

Et maintenant, on est prêt pour l’aventure.

On crée le répertoire local !

Ça me rend assez dingue cette histoire. Je vois encore des gens utiliser les répertoires systèmes pour installer des outils “personnels”.

Freedesktop recommande depuis des lustres d’utiliser un répertoire dans le HOME utilisteur pour les outils que vous installez hors package de distribution. En l’occurence, on va installer des trucs qui ne sont pas “officiels” (mais pas risqué), et il est inadmissible de voir encore des outils qui demande accès à /usr ou /usr/local.

Le répertoire dont nous avons besoin est ~/.local, dans lequel seront créé des répertoire “bin”, “share”, “cache”…

Donc:

mkdir -p ~/.local/bin
source ~/.bashrc

Et désormais, le répertoire local “bin” est dans notre “PATH”, cela veut dire que si vous installez une commande “foo” dans ce répertoire, alors la commande “foo” existera (sans demander de taper tout le chemin).

Franchement, en 2023, ça me scie les nerfs…

On se crée des alias

Les alias sont des command qui permettent d’avoir des “raccourcis”. Par exemple, la commande “ls -l” pourrait avoir un alias “ll”.

Alors, voici mes aliases, à vous d’en ajouter si vous le désirez. Ce fichier est placé en ~/.bashrc.d/aliases-and-path.sh

# J'utilise nvim, mais vous pouvez mettre
# gedit, nano, ce que vous voulez
export EDITOR=nvim

# aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias k=kubectl
alias h=helm
alias see="highlight -n -O ansi --force=text"

# append go bin to path
export PATH="$HOME/.local/share/go/bin:$PATH"

Notez:

  • see est un alias à “highlight”, il colore le fichier en sortie sur le terminal (c’est pratique pour voir du code source)
  • kubernetes et helm sont des outils que j’utilise, supprimez ces alias si vous n’en avez pas besoin
  • pareil pour “go”, je préfère placer les binaires à un endroit spécifique, et j’ajoute ce répertoire à $PATH, mais si vous n’en avez pas besoin, vous pouvez supprimer la ligne.

Pour le moment, si vous rechargez votre shell (source ~/.bashrc) alors les alias doivent fonctionner. Tapez la commande l, ll, ou la pour vérifier.

Oh My Posh

C’est optionnel, mais j’adore avoir un “prompt” plus moderne.

Oh-My-Posh est un outil qui va décorer et ajouter des fonctionnalités à votre shell (ça marche avec pas mal de shell). On l’installe assez facilement:

curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/.local/bin

Maintenant, créez un fichier ~/.bashrc.d/oh-my-posh.sh et ajoutez:

eval "$(~/.local/bin/oh-my-posh init bash --config ~/.cache/oh-my-posh/themes/bubblesline.omp.json)"

# an alias to update
alias update-oh-my-posh="curl -s https://ohmyposh.dev/install.sh | bash -s"

Parfois, il y aura une notification dans votre terminal pour vous dire qu’une nouvelle version de oh-my-posh est disponible. Dans ce cas, tapez la commande (l’alias) update-oh-my-posh et le tour est joué.

On va rendre le terminal un poil plus ergonomique

D’abord, cette fameuse “completion”, elle marche bien mais elle pose des contraintes. Elle est sensible à la casse (ça veut dire qu’elle prend en compte les majuscules et minuscules), et elle a tendance à faire défiler le terminal pour rien. Par exemple:

Tabulation scroll

Dans l’image ci-dessus, je presse la touche “tabulation” pour essayer de compléter le chemin, mais comme il existe un paquet de fhciers… il me propose toutes les possibilités dans la sortie.

On peut faire mieux !

On commence par créer un fichier ~/.inputrc dans lequel on ajoute:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on
set visible-stats on
TAB: menu-complete

Là il faut vraiment fermer votre terminal et le rouvrir. Maintenant:

Tabulation avec menu-complete

Ça évite énormément de lignes inutiles en sortie.

Ble.sh

Ble.sh est un outil qui va fortement modifier l’interaction dans votre shell.

  • Il rend le mode “menu” plus convivial, en permettant de sélectionner avec les touches de direction le fichier ou l’option que vous voulez (en completion)
  • Il fait de la coloration syntaxique avec contrôle, donc les mots clef “for, while, if…” sont colorés, ainsi que les commandes
  • Si la commande ou le contrôle n’existe pas, il le surligne
  • Il permet l’édition multiligne, par exemple en tapant une boucle
  • Et plein d’autres choses…

C’est un peu gadget, mais j’adore.

On commence par installer l’outil. Mais on va le faire “à ma manière”.

git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
make -C ble.sh install PREFIX=~/.local
rm -rf ble.sh

Et on crée le fichier ~/.bashrc.d/ble.sh qui contient:

# initialize ble.sh
source ~/.local/share/blesh/ble.sh

Idem que pour oh-my-posh, vous pouvez mettre à jour avec la comamnde ble update.

Reste que les couleurs de base sont, non mais n’ayons pas peur de le dire, affreuses. Alors personnellement j’ai reconfiguré quelques variables.

Voici mon fichier ~/.blerc:

ble-face command_function=fg=205
ble-face command_directory=fg=004,underline
ble-face filename_directory=fg=004
ble-face filename_directory_sticky=fg=103
ble-face auto_complete=fg=15,bg=000
ble-face region_insert=fg=252,bg=000
ble-face syntax_function_name=fg=105,bold
ble-face varname_export=fg=135,bold
ble-face filename_other=
bleopt complete_auto_complete=

Cela correspond mieux à mes préférences. Vous pouvez utiliser la commande ble-face pour voir toutes les variables et les modifier ensuite dans votre ~/.blerc personnel. Franchement c’est pas le truc le plus rigolo que j’ai fait dans ma vie. C’est un peu ostère comme syntaxe, et ça demande des tests. Mais bon, on ne le fait pas tous les jours.

Voilà le résultat:

Ble en action

Les raccourcis qui vont bien

Bash permet pas mal de raccourcis dont certains me paraissent indispensables.

Voici ceux que j’utilise très souvent:

  • Ctrl+c: très connu mais sait-on jamai… cela “stoppe” la commande en cours
  • Ctrl+r ou Ctrl-Maj-r: permet de retrouver une commande qu’on a tapé
  • Ctrl+x Ctrl+e: édite la ligne en cours dans un éditeur de texte (celui configuré dans la variable EDITOR). Astuce, gardez la touche Ctrl enfoncé et pressez successivement x puis e
  • Ctrl+l: nettoie le terminal, “clear”
  • Alt+b et Alt+f: reculer ou avancer d’un “mot” dans la commande (f=forwar, b=backward)
  • Alt+d: supprime le mot sous le curseur

Un autre raccourcis que j’utilise énormément est Ctrl+z, il met en “tâche de fond” la commande en cours. Pour revenir à cette tache, il suffit de taper fg. Mais à quoi ça sert me direz vous ?

Et bien, j’utilise “neovim” (un vim amélioré), et parfois j’ai envie de taper une commande sans avoir à ouvrir un nouveau terminal. Du coup, je presse Ctrl+z dans vim, ça le met en tâche de fond. Je peux alors taper des commandes, puis taper fg et je reviens à vim.

Mais la ligne de commande c’est aussi lié à un terminal

Bash est un shell, un outil qui interprète et utilise des commandes. Cela passe par un télétype, ou un émulateur de terminal. Dans 99% des cas, c’est un émulateur que vous allez utiliser.

Par exemple, gnome-terminal, terminator ou xterm.

Pour ma part, j’ai choisi un autre terminal. Certes, un peu plus lourd en mémoire mais qui a des options qui, à mon sens, sont primordiales quand on travaille énormément sur le terminal.

Mon choix se porte, à ce jour, sur Kitty-Terminal

Pour plusieurs raisons, mais celles que je mets en avant sont:

  • permet de splitter le terminal (comme le fait terminator) et de changer les raccourcis
  • permet l’utilisation de polices avec ligatures (comme Fira Code, ou Jetbrain Mono Nerd Font)
  • permet d’afficher des images dans le terminal (notamment avec ranger, un navigateur de fichier terminal)
  • de scripter des comportements en python (par exemple j’ai un bout de code qui me permet de “zoomer” sur une partie de mon terminal quand il est splitté)

Kitty est dans les paquets de Fedora, et je vous invite à le tester, à le configurer et de ne pas hésiter à aller lire la documentation.

Depuis les dernières versions, kitten est déjà présent, donc kitten icat fonctionne bien. Mais vous pouvez ajouter cet alias dans ~/.bashrc.d/kitty.sh:

# see image in terminal
alias icat=`kitten icat`

Et ça fait son effet:

icat

ranger

Que dire de plus…

Il existe tellement de possibilités de configuration de terminal, et de votre shell, qu’un simple article ne suffit bien évidemment pas.

Je vous conseille d’installer et configurer ranger qui est un superbe navigateur de fichiers terminal. Associé à kitty c’est un outil fabuleux. Il ne faut pas hésiter à aller chercher un peu comment changer les thèmes. Que ce soit sur Kitty ou ranger.

Aussi, au lieu de top ou htop, testez l’expérience bpytop qui est, une fois encore, une preuve que le terminal est loin d’être un machin austère.

Et en ce qui concerne les outils de développements, rien ne vaut Coc dans vim/neovim. Avec quelques plugins, votre éditeur devient un IDE proche de ce qu’on voit sur VSCode.

Je pense en faire un article complet un jour.

Bref, éclatez vous !

comments powered by Disqus