Parfois, lorsqu'on fait un script shell, on souhaite enregistrer temporairement des fichiers quelque part, cloner temporairement un référentiel Git, etc. Ces données temporaires doivent être supprimées une fois le script terminé.
On peut utiliser la commande mktemp pour créer un fichier ou un répertoire temporaire à l'emplacement approprié en fonction du système d'exploitation :
mktemp -d -t mon-script
/var/dossiers/a0/8alqx_yap8dl30000ap/T/mon-script.J3Fv0NWl
Le répertoire est créé avec le mode 0700 par défaut, ce qui signifie qu'il ne doit être accessible que par l'utilisateur :
ls -la "$tmp_dir" total 0 drwx------ 2 vous votre groupe 64 6 février 17:19 . drwx------@ 98 vous votre groupe 3136 6 février 17:19 ..
On peut ce répertoire temporaire dans une variable :
tmp_dir=$( mktemp -d -t mon-script )
Cette fonction nettoiera le répertoire temporaire, en s'assurant d'abord qu'il existe (en cas d'échec de la commande mktemp) :
clean_up() { test -d "$tmp_dir" && rm -fr "$tmp_dir" }
On ne veut pas appeler cette fonction de nettoyage manuellement, mais le script pourrait échouer avant qu'il ne soit terminé, il pourrait recevoir un signal et sortir.
Cependant, On peut utiliser la commande trap intégrée de Bash pour intercepter le pseudo-signal EXIT. Le script recevra ce signal lorsqu'il se fermera, que ce soit avec succès, sans succès ou en raison d'une interruption (par exemple, l'utilisateur appuyant sur Ctrl-C).
trap "clean_up $tmp_dir" EXIT
On peut maintenant écrire le reste du script et mettre ce qu'on veut dans le répertoire temporaire, en sachant qu'il sera automatiquement nettoyé à la fin.
Voici la version complète :
#!/usr/bin/env bash clean_up() { test -d "$tmp_dir" && rm -fr "$tmp_dir" } tmp_dir=$( mktemp -d -t my-script ) trap "clean_up $tmp_dir" EXIT echo Do the magic...