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 -uSie das temporäre Verzeichnis ganz einfach abrufen mit ...
$ tmpdir=$(dirname $(mktemp -u))
Weitere Informationen zu finden Sie mktemphier .
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 -tSchalter behandelt werden . Während diese Option anscheinend ein Argument ( prefix) erfordert, scheint sie mktempsich $TMPDIRbei 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.TMPDIRGibt an (vom System oder Administrator oder Benutzer), wann Sie nicht/tmpfür temporäre Dateien verwenden sollen.