Sehr oft führen wir eine ausführbare Datei aus, die einige temporäre Dateien schreiben / lesen muss. Normalerweise erstellen wir ein temporäres Verzeichnis, führen die ausführbare Datei dort aus und löschen das Verzeichnis, wenn das Skript fertig ist.
Ich möchte das Verzeichnis löschen, auch wenn die ausführbare Datei beendet ist. Ich habe versucht, es einzuwickeln:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Wenn my_binary
dies stirbt, löscht der Kernel als letztes das Verzeichnis, da das Skript der letzte Prozess ist, der dies enthält inode
. Ich kann jedoch keine Datei im gelöschten Verzeichnis erstellen.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
Ausgänge touch: file.txt: No such file or directory
Das Beste, was ich mir einfallen lassen kann, ist, das temporäre Verzeichnis zu löschen, wenn der Prozess abbricht, die häufigsten Signale abzufangen und einen Bereinigungsprozess mit cron auszuführen:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Gibt es eine einfache Möglichkeit, ein wirklich temporäres Verzeichnis zu erstellen, das automatisch gelöscht wird, wenn die aktuelle Binärdatei stirbt, egal was passiert?
cleanup
es ausgeführt werden kann, bevor das Mktemp abgeschlossen ist. Möglicherweise möchten Sie,unset dir
bevor Sie die Falle einstellen.