Allez, vendredi aprèm: il est temps de continuer la liste.
Problème:
La plupart de mes scripts prennent un ou des fichiers en entrée, travaillent les données de multiples façons et donnent un ou plusieurs fichiers en sortie. Les traitements peuvent être long et complexes et nécessitent souvent plusieurs traitements à la suite. J'utilise donc des fichiers temporaires. Le problème est le nommage de ces fichiers, ainsi que leur nettoyage. Où les mettre? Dans le répertoire du (des) fichiers d'entrée, de sortie?
Solution:
Comme les autres personnes (admins) n'apprécient pas avoir des fichiers temporaires noyant les fichiers importants, j'évite absolument de mélanger les fichiers: il suffit qu'un script soit tué pour avoir des fichiers temporaires partout. Comme la petite plaquette aux toilettes l'indique: "Vous êtes prié de laisser l'endroit aussi propre que vous l'avez trouvé en entrant", faut bien ranger après. Donc /tmp est un bon candidat pour les fichiers temporaires. Néanmoins, si deux admins lancent le même script en même temps, il risque d'y avoir mélange de pinceaux. Voici finalement ce que j'utilise le plus souvent possible.
tmpDir=$(mktemp -d /tmp/$(basename $0).XXX)
Donc je mets tous mes fichiers temporaires dans /tmp/<nom_script>.XXX. Le nom du script est évidemment utile pour comprendre d'où vient ce répertoire, les XXX sont trois caractères aléatoires pour éviter les conflits entre plusieurs exécutions simultanées. Le possesseur du répertoire est celui qui a lancé le script.
À l'intérieur de ce répertoire, je crée des noms de fichier du genre: tmp.initial, tmp.sorted, tmp.before_cleanup. Ainsi, il est facile de débuguer en lisant chaque étape du programme.
Un petit détail encore:
SIl faut penser à nettoyer (rm -rf $tmpDir) à chaque sortie possible du script (commande exit). Pour ma part, au lieu de faire un exit, je crée la fonction end qui nettoie et fait tous les traitements nécessaires de fin de script. Facile alors de commenter le rm -rf $tmpDir pour conserver les fichiers afin de débuguer!
Partager