Ich habe ein Skript, das temporäre Dateien für seine Arbeit erstellen und nach sich selbst bereinigen muss. Meine Frage ist das Finden des richtigen Basisverzeichnisses für die temporären Dateien.
Das Skript muss auf mehreren Plattformen funktionieren: Git Bash (Windows), Solaris, Linux, OSX. Auf jeder Plattform wird das bevorzugte temporäre Verzeichnis unterschiedlich ausgedrückt:
- Windows:
%TMP%
(und möglicherweise%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: Sollte es sein
$TMPDIR
, scheint aber auf mehreren Systemen, die ich ausprobiert habe, nicht eingestellt zu sein
Also habe ich in meinem Skript dieses Boilerplate hinzugefügt:
if test -d "$TMPDIR"; then
:
elif test -d "$TMP"; then
TMPDIR=$TMP
elif test -d /var/tmp; then
TMPDIR=/var/tmp
else
TMPDIR=/tmp
fi
Das scheint zu langweilig. Gibt es einen besseren Weg?
shell-script
directory
tmp
janos
quelle
quelle
${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.Antworten:
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:Sie können es ganz einfach in einem Skript verwenden:
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 ...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, als
mktemp
müssten Sie für Mac OS X eine Vorlage bereitstellen (ein optionales Argument unter Linux). Zitat: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 siemktemp
sich$TMPDIR
bei Bedarf darauf zu verlassen.Alles in allem sollten Sie in der Lage sein, mit ... dasselbe Ergebnis wie oben zu erzielen.
Für Feedback von Mac OS X-Benutzern wäre ich sehr dankbar, da ich diese Lösung nicht selbst testen kann.
quelle
gitbash
eine Shell-Schnittstelle benötigen , daher meine "leichte". Ich kann eigentlich nicht sagen, wo temporäre Dateien auf einem Windows-System gespeichert sind ...c:\User\Name\..............\stuff
. Und es gibt wahrscheinlich 100 von ihnen. Dennoch nähern sich einige Linux - Distributionen dem gleichen Grad des Wahnsinns in/var
. Ich war nur neugierig. Es kam mir seltsam vor - meiner Erfahrung nach ist Frust sehr tragbar und Bequemlichkeit weniger. Trotzdem sehr gute Antwort.WINDOWS/Temp
oderWindows/Temp
als Standardverzeichnis für seine temporären Dateien. Dieses Verzeichnis ist auch auf Windows 7-Computern vorhanden. Mit meinem Skript kann der Benutzer jedoch ein alternatives temporäres Verzeichnis in der Befehlszeile angeben.mktemp
.mktemp
funktioniert einfach: simplemktemp
gibt eine Datei undmktemp -d
ein Verzeichnis zurück; Keine Vorlagen erforderlich. Das Handbuch wird jedoch nicht aktualisiert.Wenn Sie dasselbe in weniger Zeilen suchen ...
Sie könnten dies in einem schreiben.
quelle
Sie könnten tun:
Die Shell sollte entweder ein ausführbares Verzeichnis in einer der 4 Alternativen finden oder mit einem aussagekräftigen Fehler beenden. Dennoch definiert POSIX die
$TMPDIR
Variable (für XCU-Systeme) :Es erfordert auch den
/tmp
Pfad.quelle