Rendre ses scripts accessibles de n’importe où

Tous ceux qui ont déjà créé des scripts Bash savent combien il est énervant de devoir soit se placer dans le dossier contenant le script en question, soit écrire le chemin complet vers le script pour l’exécuter. Or il est possible d’exécuter ses scripts depuis n’importe quel emplacement dans l’arborescence, simplement en disant à GNU/Linux où il doit chercher.

Un peu de théorie…

Afin d’exécuter des scripts et a fortiori des programmes, GNU/Linux regarde des dossiers spécifiques pour trouver les exécutables. Ces dossiers sont contenus dans la variable d’environnement $PATH. Afin d’afficher cette variable et savoir quels sont les dossiers parcourus, tapez la commande suivant dans un terminal :

$ echo $PATH

Les dossiers parcourus sont séparés par le caractère « : ». Si vous voulez les voir s’afficher avec un dossier par ligne, vous pouvez écrire la commande suivante :

$ echo $PATH | sed -e "s/:/\n/g"

… et on passe à la pratique

Pour ajouter votre (vos) propre(s) dossier(s) à cette liste, il vous faut éditer votre fichier .bashrc. Ajoutez-y à la fin une des deux lignes suivantes :

  • si vous voulez ajouter un seul dossier :
export PATH=$PATH:lien_absolu_vers_votre_dossier
  • si vous voulez en ajouter plusieurs, il suffit de séparer les dossier par un « : » de la manière suivante :
export PATH=$PATH:lien_absolu_vers_votre_dossier_1:lien_absolu_vers_votre_dossier_2

Vous auriez pu écrire ces lignes directement dans votre terminal, mais cela n’aurait fonctionné que pour la session de ce terminal. Pensez à relancer une instance de terminal pour les changements soient pris en compte. À présent, vous pouvez appeler vos programmes et scripts shell où que vous vous trouviez dans l’arborescence de votre ordinateur.

Calculez l’âge du capitaine

Voici un petit script bash que j’ai écrit (avec un peu d’aide, je l’avoue), qui n’a aucune utilité, si ce n’est calculer l’âge de quelqu’un. Il n’utilise que des fonctions de base. L’utilisation est simple, lancez le script et suivez les indications de votre terminal

#!/bin/bash
JourActu=`date +%-d`
MoisActu=`date +%-m`
AnneeActu=`date +%Y`

echo "Nous sommes bien le $JourActu/$MoisActu/$AnneeActu."

read -p 'Entrez votre jour de naissance : ' JourNaiss
read -p 'Entrez votre mois de naissance : ' MoisNaiss
read -p 'Entrez votre année de naissance : ' AnneeNaiss

echo "Vous êtes donc né(e) le $JourNaiss/$MoisNaiss/$AnneeNaiss."

let "AnneeReel = AnneeActu - AnneeNaiss"

if [ $MoisNaiss -gt $MoisActu ] || ( [ $MoisNaiss -eq $MoisActu ] && [ $JourNaiss -gt $JourActu ] )
then
let "AnneeReel = AnneeReel - 1"
fi
echo "Vous avez $AnneeReel ans révolus."

let "AnneeAnniv = AnneeNaiss + AnneeReel"
echo "Votre dernier anniversaire était le $JourNaiss/$MoisNaiss/$AnneeAnniv."

if [ $AnneeAnniv -eq $AnneeActu ]
then
let "MoisReel = MoisActu - MoisNaiss"
else
let "MoisReel = 12 + MoisActu - MoisNaiss"
fi

if [ $JourNaiss -gt $JourActu ] 
then
let "MoisReel = MoisReel - 1"
fi

echo "Vous avez $AnneeReel ans et $MoisReel mois."

if [ $JourNaiss -le $JourActu ]
then
let "JourReel = JourActu - JourNaiss"
else
case $MoisActu in
1 | 2 | 4 | 6 | 8 | 9 | 11)
let "JourReel = 31 - JourNaiss + JourActu"
;;
5 | 7 | 10 | 12)
let "JourReel = 30 - JourNaiss + JourActu"
;;
3)
if [ $(( $AnneeActu % 4 )) -eq 0 ] &&
( [ $(( $AnneeActu % 100 )) -ne 0 ] || [ $(( $AnneeActu % 400 )) -eq 0 ] )
then let " JourReel = 29 - JourNaiss + JourActu"
else let " JourReel = 28 - JourNaiss + JourActu"
fi
;;
esac
fi

echo "Vous avez $AnneeReel ans, $MoisReel mois et $JourReel jours."