Nieco bardziej przenośnym sposobem obsługi plików tymczasowych jest użycie mktemp
. Stworzy pliki tymczasowe i zwróci dla ciebie ich ścieżki. Na przykład:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Możesz użyć go w skrypcie dość łatwo:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Czytając stronę podręcznika, powinieneś być w stanie ustawić opcje zgodnie z własnymi potrzebami. Na przykład:
-d
tworzy katalog zamiast pliku.
-u
generuje nazwę, ale niczego nie tworzy.
Za pomocą -u
możesz łatwo odzyskać katalog tymczasowy za pomocą ...
$ tmpdir=$(dirname $(mktemp -u))
Więcej informacji na temat mktemp
jest dostępnych tutaj .
Edycja dotycząca Mac OS X: Nigdy nie korzystałem z systemu Mac OSX, ale zgodnie z komentarzem Tyilo poniżej, wygląda na tomktemp
, że Mac OSX wymaga dostarczenia szablonu (który jest opcjonalnym argumentem w systemie Linux). Cytowanie:
Szablon może być dowolną nazwą pliku z dołączoną na przykład pewną liczbą „X” /tmp/temp.XXXX
. Końcowe „X” są zastępowane bieżącym numerem procesu i / lub unikalną kombinacją liter. Liczba unikalnych nazw plików, które mktemp może zwrócić, zależy od podanej liczby „X”; sześć „X” spowoduje, że mktemp wybierze 1 z 56800235584 (62 ** 6) możliwych nazw plików.
Strona podręcznika mówi również, że ta implementacja jest zainspirowana stroną podręcznika OpenBSD dla mktemp
. Podobną rozbieżność można zatem zaobserwować również dla użytkowników OpenBSD i FreeBSD (patrz sekcja Historia ).
Teraz, jak zapewne zauważyłeś, wymaga to podania pełnej ścieżki pliku, w tym katalogu tymczasowego, którego szukasz w pytaniu. Ten mały problem można rozwiązać za pomocą -t
przełącznika. Chociaż wydaje się, że ta opcja wymaga argumentu ( prefix
), wydaje się, że mktemp
opiera się ona w $TMPDIR
razie potrzeby.
Podsumowując, powinieneś być w stanie uzyskać taki sam wynik jak powyżej, używając ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Wszelkie uwagi od użytkowników systemu Mac OS X byłyby bardzo mile widziane, ponieważ nie jestem w stanie samodzielnie przetestować tego rozwiązania.
${TMPDIR-/tmp}
na Unix-like.TMPDIR
jest tam (przez system, administratora lub użytkownika), aby powiedzieć, kiedy nie należy używać/tmp
do plików tymczasowych.