Eine etwas portablere Möglichkeit, mit temporären Dateien umzugehen, ist die Verwendung von mktemp
. Es werden temporäre Dateien erstellt und ihre Pfade für Sie zurückgegeben. Zum Beispiel:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Sie können es ganz einfach in einem Skript verwenden:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Wenn Sie die Manpage lesen, sollten Sie in der Lage sein, Optionen gemäß Ihren Anforderungen festzulegen. Zum Beispiel:
-d
Erstellt ein Verzeichnis anstelle einer Datei.
-u
erzeugt einen Namen, erzeugt aber nichts.
Mit können -u
Sie das temporäre Verzeichnis ganz einfach abrufen mit ...
$ tmpdir=$(dirname $(mktemp -u))
Weitere Informationen zu finden Sie mktemp
hier .
Bearbeiten in Bezug auf Mac OS X: Ich habe noch nie ein Mac OS X- System verwendet, aber laut einem Kommentar von Tyilo scheint es, alsmktemp
müssten Sie für Mac OS X eine Vorlage bereitstellen (ein optionales Argument unter Linux). Zitat:
Die Vorlage kann ein beliebiger Dateiname sein, an den beispielsweise eine Anzahl von "X" angehängt ist /tmp/temp.XXXX
. Die nachfolgenden "X" werden durch die aktuelle Prozessnummer und / oder eine eindeutige Buchstabenkombination ersetzt. Die Anzahl der eindeutigen Dateinamen, die mktemp zurückgeben kann, hängt von der Anzahl der bereitgestellten "Xs" ab. Sechs "X" führen dazu, dass mktemp 1 von 56800235584 (62 ** 6) möglichen Dateinamen auswählt.
Die Manpage sagt auch, dass diese Implementierung von der OpenBSD-Manpage für inspiriert ist mktemp
. Eine ähnliche Divergenz könnte daher von OpenBSD und FreeBSD - Benutzer als auch (siehe beachten History Abschnitt).
Wie Sie wahrscheinlich bemerkt haben, müssen Sie dazu einen vollständigen Dateipfad angeben, einschließlich des temporären Verzeichnisses, nach dem Sie in Ihrer Frage suchen. Dieses kleine Problem kann mit dem -t
Schalter behandelt werden . Während diese Option anscheinend ein Argument ( prefix
) erfordert, scheint sie mktemp
sich $TMPDIR
bei Bedarf darauf zu verlassen.
Alles in allem sollten Sie in der Lage sein, mit ... dasselbe Ergebnis wie oben zu erzielen.
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Für Feedback von Mac OS X-Benutzern wäre ich sehr dankbar, da ich diese Lösung nicht selbst testen kann.
${TMPDIR-/tmp}
auf Unix-Likes anwenden.TMPDIR
Gibt an (vom System oder Administrator oder Benutzer), wann Sie nicht/tmp
für temporäre Dateien verwenden sollen.