Molto spesso, eseguiamo un eseguibile che deve scrivere / leggere alcuni file temporanei. Generalmente creiamo una directory temporanea, eseguiamo lì l'eseguibile ed eliminiamo la directory quando lo script è terminato.
Voglio eliminare la directory anche se l'eseguibile viene ucciso. Ho cercato di avvolgerlo in:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Quando my_binary
muore, l'ultimo processo il kernel eliminerà la directory, poiché lo script è l'ultimo processo che lo tiene inode
; ma non riesco a creare alcun file nella directory eliminata.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
uscite touch: file.txt: No such file or directory
Il meglio che potrei trovare è eliminare la directory temporanea quando il processo termina, catturando i segnali più comuni ed eseguire un processo di pulizia con cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Esiste un modo semplice per creare una directory davvero temporanea che viene eliminata automaticamente quando il file binario attuale muore, non importa quale?
cleanup
può essere eseguita prima che mktemp sia terminato. Potrebbe essere necessariounset dir
prima di impostare la trappola.