Améliorer la gestion de l'historique de Bash🔗
Introduction
Ça fait des années que j'utilise Bash comme shell. Il n'est pas parfait, mais avec le temps, je m'y suis habitué. Je l'ai peu à peu configuré pour qu'il corresponde à mon besoin. Dernièrement, je me suis retrouvé en perte de commande. En effet, j'avais pris soin d'élaborer un appel compliqué avec de nombreux arguments à une commande. Je croyais bêtement que j'allais la retrouver dans l'historique. Mais, cela faisait trop longtemps que je l'avais saisie.
Pour remédier à ça, je me suis dit qu'il était temps d'améliorer ce point et c'est l'objet de ce court article.
Configuration
Voilà la configuration que j'ai ajoutée. Globalement, je configure l'historique de Bash pour enregistrer une quantité quasi infinie de commandes. En plus, je formatte l'historique pour garder trace des timestamps du lancement des commandes. Ça me permet de savoir quand j'ai lancé la commande et c'est parfois utile. Enfin, pour ne pas trop encombrer l'historique de commandes inutiles, j'indique des commandes à ne pas enregistrer (le ls sans argument et l'appel à la doc).
# History configuration ## Ignore duplicate and space starting stuff HISTCONTROL=ignoreboth HISTSIZE=100000 HISTFILESIZE=200000 HISTIGNORE="ls:man*:history" ## Display timestamps for history HISTTIMEFORMAT="%F %T " ## Append to the history file, don't overwrite it shopt -s histappend ## Use fzf for search stuff if command -v "fzf" &> /dev/null then source /usr/share/doc/fzf/examples/key-bindings.bash fi
Bonus: améliorer le visuel de la recherche
La recherche de Bash, avec Ctrl-R reste assez basique. J'aurais bien aimé avoir la liste complète de ce qui s'approche de ce que je recherche. Pour ça, il faut un programme qui affiche la liste. J'ai trouvé l'outil fzf qui fait ça. Il est codé en Rust et il est disponible dans Debian stable (bookworm).
apt install fzf
Le paquet fzf vient avec une configuration pour bash que vous pouvez activer comme je l'ai fait dans .bashrc au dessus. Ainsi, un simple Ctrl-R appelle fzf et permet d'afficher une liste fonctionnelle qu'on peut parcourir avec les flèches du clavier. Simple, mais efficace.
fzf est codé en Rust, mais ce qui est bien, c'est qu'il est livré sous forme de binaire statique, ce qui évite d'installer toute la bibliothèque standard Rust (qui peut être volumineuse) ainsi que ses nombreuses dépendances. Le binaire est certes assez gros, mais ça reste raisonnable.