Ich verwende in meinen Bash-Skripten regelmäßig temporäre Dateien zur Zwischenspeicherung von Informationen. mktemp ist hierzu das beste Tool. Es legt im Verzeichnis /tmp eine temporäre Datei mit einem zufälligen Prefix an (Beispiel: /tmp/tmp.zPPMEsOEYq). Auch wenn diese Dateien im /tmp Verzeichnis liegen und einen Neustart somit nicht überleben, sollte man dennoch die sicherstellen, dass solche temporären Dateien von Skripten nach Beendigung des Skriptes gelöscht werden. Laufen auf einem Server regelmäßig Skripte, welche alle mktemp verwenden, sammeln sich im /tmp Verzeichnis über die Zeit einige dieser temproären Dateien an, welche sich nicht mehr dem ursprünglichen Skript zuordnen lassen.

    Dieses Problem kann man umgehen, indem im Skript eine Funktion zum erstellen einer temporären Dateie eingebunden wird, die beim Aufruf den Namen für eine temporäre Datei zurück gibt, die den Namen des ursprünglichen Skriptes, die PID sowie ein zufälliges Prefix beinhaltet . Somit lassen sich Überreste temporärer Dateien immer dem Verursacher zuordnen.

    function tempfile() {
      tempprefix=$(basename "$0")
      mktemp /tmp/${tempprefix}-$$.XXXXXX
    }
    
    temp=$(tempfile)

    Wird die Funktion in der Bash aufgerufen, heißt die temporäre Datei z.B. /tmp/bash-8218.2DWc4q.

     

    Definiert man dann über trap am Skriptanfang noch was beim beenden des Skriptes ausgeführt werden soll, bleiben auch keine Reste mehr übrig.

    trap "rm -f "${temp}"; exit" INT TERM EXIT

     

    Leave A Reply