16 décembre 2022

BASH - programmation idempotente

En mathématiques et en informatique, l'idempotence signifie qu'une opération a le même effet qu'on l'applique une ou plusieurs fois.
On doit pouvoir lancer une commande et avoir le résultat escompté malgré le changement de situation dans la machine.
 
Voici un exemple avec la création d'un répertoire

jp@jp-aspire:~$ mkdir sandbox
jp@jp-aspire:~$ ls -l
total 80
....
drwxr-xr-x 2 jp jp 4096 sep 12 00:26 Public
drwxrwxr-x 2 jp jp 4096 jan 29 15:49 sandbox
drwxr-xr-x 7 jp jp 4096 jan 28 23:41 snap
drwxr-xr-x 2 jp jp 4096 jan 25 11:33 Téléchargements
....
jp@jp-aspire:~$ echo $?
0
La commande a bien créé le répertoire "sandbox" et la commande "echo $?" indique qu'il n'y a pas d'erreur dans ce travail avec en retour la valeur "0"
 
Si l'on lance à nouveau la même commande pour créer le répertoire "sandbox"
jp@jp-aspire:~$ mkdir sandbox
mkdir: impossible de créer le répertoire «sandbox»: Le fichier existe
jp@jp-aspire:~$ echo $?
1
L’environnement bash nous retourne un message d'erreur et le test avec"echo $?" nous donne bien une erreur  "1"

Si l'on veut être en mode idempotent, il faut alors ajouter à la commande "mkdir" le paramètre -p  (A voir: man mkdir).
On relance la commande avec  notre petite modification et nous avons alors comme résultat
jp@jp-aspire:~$ mkdir -p sandbox
jp@jp-aspire:~$ echo $?
0
jp@jp-aspire:~$

Alors avec la commande "echo $?" le résultat donne maintenant 0  et nous n'avons plus de message d'erreur en retour.
Le traitement et les résultats sont identiques, que le répertoire existe ou pas 👍
 
Nous sommes alors désormais bien en mode idempotent 😊 
 
Que le répertoire n'existe pas ou qu'il soit déjà créé, la commande ne bloque pas la suite des opérations.
 
E N J O Y