Linux : Personnaliser son bashrc pour gagner en efficacité

Partager cet article

Temps estimé pour la lecture de cet article : 28 min

Hi everyone ! Aujourd’hui, je vais tâcher de vous présenter un fichier très intéressant sous linux, appelé le bashrc ! Il se trouve à la racine de votre dossier /home, par exemple pour moi /home/ludo/.bashrc. Comme vous pouvez le constater le fichier commence par un point. C’est ce qu’on appelle un fichier caché, afin d’afficher de tels fichiers sous linux, il faut faire un ctrl+h dans votre gestionnaire de fichiers ou un simple ls -a dans un terminal.

Qu’est-ce que le bashrc ?

Le bashrc est un fichier de configuration permettant de personnaliser son terminal. Il nous permet de définir des alias (des raccourcis pour certaines commandes), de se créer des fonctions personnel ou enfin de modifier son prompt.

Grâce au alias, on peut par exemple redéfinir la commande ls –color à un ls, pour cela il suffit de faire :

alias nom='commande'

On pourrait ainsi définir l’alias ls, afin qu’a chaque appelle de la commande ls, l’option –color soit activé à chaque fois.

alias ls='ls --color'

Des alias bash à gogo

Laissez moi, partager avec vous, les alias que j’utilise tout les jours et qui me semble pertinent.

alias ll='ls -la'
alias ls='ls --color'
alias q='exit'
alias v='vim' 
alias vb='vim ~/.bashrc && . ~/.bashrc'
alias vv='vim ~/.vimrc'
alias sagi='sudo apt-get install'
alias sagu='sudo apt-get update'
alias sarp='sudo add-apt-repository ppa:'
alias n='nautilus'
alias e='evince'
alias c..="cd ../../"
alias cx="chmod +x"
alias h="history | grep $1"

Dans, les plus utile on retrouve ainsi l’alias cx, qui permet le droit d’exécution à un fichier, très utile quand on télécharge des binaires sur internet. La commande vb, permet donc d’ouvrir ce fameux fichier bashrc avec vim et une fois qu’on quitte vim, on ‘source’ notre bash grâce à la commande . ~/.bashrc, ce qui permet d’appliquer immédiatement les changements au terminal courant (sinon, il faut fermer et relancer ce dernier). L’alias vv, va nous permettre de faire la même avec le fichier de configuration de l’éditeur de texte vim.

J’ai également des alias comme ‘n’ pour nautilus et ‘e’ pour evince ce qui me permet d’ouvrir très rapidement un dossier ou un pdf. Par exemple comme ceci : « n ~ », ce qui va me permettre d’ouvrir le dossier home depuis le terminal ! Enfin un dernier alias qui peut-être intéressant, c’est la commande history | grep $1, en tapant h, suivi du début de commande que vous recherchez vous allez pouvoir retrouver rapidement une commande déjà utilisé.

Les variables d’environnement de bash

A part les alias, on peut également customiser les variables d’environnement et certaines présente un intérêt certains ! L’exemple le plus concret est la variable CDPATH, elle permet d’éviter de taper des chemins complets pour accéder à un dossier, ici par exemple afin d’accéder à un projet qui s’appellerait cakephp/ et qui se situerais dans le dossier /var/www/, on devrait faire : cd /var/www/cakephp.

Grâce à la variable CDPATH, un simple : cd cakephp et on se retrouverais dans le dossier désiré, en plus l’auto-complétion (tab sous linux) fonctionne sur les dossiers contenus dans le CDPATH. Toutefois, attention si vous mettez trop de dossiers dans le CDPATH, ça peut très vite dégénérer l’auto-complétion vous proposera en effet beaucoup trop de solutions, à utiliser avec parcimonie donc !

Il y a également la variable PATH. Elle correspond aux répertoires dans lesquels le shell cherche la commande qu’on écrit au clavier. On peut donc, se créer un dossier bin, dans notre home et y ajouter des scripts ou binaires qui nous intéressent. On pourra alors les exécuter de n’importe quel dossier. Le shell ayant connaissance de ces outils grâce à cette variable.

CDPATH=~/Documents/Projets:/var/www
export PATH=$PATH:~/Documents/bin

Personaliser le prompt de son bash

Maintenant on va parler de la variable PS1, cette dernière permet de customiser son prompt ! C’est-à-dire de redéfinir l’apparence par défaut du résultat obtenu lors de l’ouverture d’un terminal. Voici, par exemple la redéfinition que j’en fais :

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
DEFAULT=$(tput sgr0)

function parse_git_branch {
	git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1]/"
}
function parse_stash {
	NB_STASH=$(git stash list 2> /dev/null | wc -l | xargs)
	if [ "$NB_STASH" -gt "0" ]; then
		echo "[$NB_STASH]"
	fi
}
PS1="\u\[$CYAN\] \w \[$DEFAULT\][\[$RED\]\A\[$DEFAULT\]]\[$GREEN\]\$(parse_git_branch)\[$DEFAULT\]\[$YELLOW\]\$(parse_stash)\[$DEFAULT\] -> "

Tout d’abord, on peut voir que je définis un ensemble de variables. Ce sont des couleurs que le terminal peut interpréter et afficher. La variable PS1 possède beaucoup d’options et permet vraiment d’aller assez loin dans la customisation, voici un extrait du man :

  • \n : Faire un retour à la ligne
  • \r : Faire un retour en début de ligne (carriage return)
  • \j : le nombre de jobs réalisé par le shell (correspond aux tâches exécutés en fond, grâce au ctrl+z)
  • \d : La date au format : « Jour Mois Année »
  • \t ou \T : le temps soit sous la forme 24h, hh:mm:ss ou sur 12h
  • \A : La date actuelle sous le format HH:MM (24h)
  • \u : Le nom de l’utilisateur courant.
  • \v : La version du bash
  • \! : Le numéro de la dernière commande exécuté.
  • \w : le dossier courant le ~ représente le $HOME.

Enfin, j’utilise une combinaisons de commandes pour récupérer la branche courante d’un repo git et de l’afficher si je suis dans un repository. Ainsi, que le nombre de stash effectués et disponible.

Et voici, un exemple de résultat de ma variable PS1 :

bash linux ps1

Ps1 – bash

Bash et les fonctions

Enfin, last but not least, comme dirait nos amis anglais : il est possible de créer nos propres fonctions !

Ainsi par exemple :

  • La fonction ctex() définit ci-dessous est capable de générer un pdf à partir d’un fichier .tex et de supprimer tout les fichiers temporaires résultant de la compilation. Enfin, elle va ouvrir le résultat avec evince.
  • La fonction gcv(), permet d’ajouter un plugin à vim. On précise l’url vers le dépôt git du plugin et le nom que l’on veut donner au dossier. Le plugin sera alors cloné et le nom du plugin ajouté directement au vimrc (en supposant qu’on utilise Vundle).
  • mkcd() crée un dossier et se déplace dedans
  • Enfin, la dernière méthode up(), permet de remonter d’un nombre quelconques de dossiers. Par exemple si je suis dans le dossier : ~/Documents/Etudes/IUT/, il me suffit de faire up 3, pour me rendre à ma home.

Voici, le code associée aux fonctions décrites au-dessus :

function ctex() {
	pdflatex $1
	rm *.aux
	rm *.log 
	rm *.out
	name=$(basename $1)
	name="${name%.*}.pdf"
	evince $name
}
function gcv() {
	git clone $1 ~/.vim/bundle/$2
	echo "Bundle '$2'" >> ~/.vimrc
}
function mkcd () {
	mkdir "$1"
	cd "$1"
}
function up() {
	ups=""
	for i in $(seq 1 $1) 
	do
		ups=$ups"../"
	done
	cd $ups
}

Petite précision pour ceux qui voudraient créer eux mêmes leurs fonctions, les variables $1, $2… correspondent aux variables passées en paramètres d’une fonction.

Conclusion

Et voila, j’espère vous avoir donné un bon aperçu de ce qui est possible de faire avec le terminal et vous avoir montré à quel point on peut gagner en efficacité avec ce dernier. Beaucoup de ces fonctions ou alias proviennent d’internet et je remercie leurs auteurs pour le partage !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.