Très souvent, nous exécutons un exécutable qui doit écrire / lire certains fichiers temporaires. Nous créons généralement un répertoire temporaire, y exécutons l'exécutable et supprimons le répertoire lorsque le script est terminé.
Je veux supprimer le répertoire même si l'exécutable est tué. J'ai essayé de l'envelopper:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Quand il my_binary
meurt, le dernier processus du noyau supprimera le répertoire, car le script est le dernier processus qui contient cela inode
; mais je ne peux pas créer de fichier dans le répertoire supprimé.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
les sorties touch: file.txt: No such file or directory
Le mieux que j'ai pu trouver est de supprimer le répertoire temporaire à la fin du processus, d'attraper les signaux les plus courants et d'exécuter un processus de nettoyage avec cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Existe-t-il un moyen simple de créer un répertoire vraiment temporaire qui est supprimé automatiquement lorsque le binaire actuel meurt, quoi qu'il arrive?
cleanup
peut être exécutée avant la fin de mktemp. Vous voudrez peut-êtreunset dir
avant de régler le piège.