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ą -umożesz łatwo odzyskać katalog tymczasowy za pomocą ...
$ tmpdir=$(dirname $(mktemp -u))
Więcej informacji na temat mktempjest 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ą -tprzełącznika. Chociaż wydaje się, że ta opcja wymaga argumentu ( prefix), wydaje się, że mktempopiera się ona w $TMPDIRrazie 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.TMPDIRjest tam (przez system, administratora lub użytkownika), aby powiedzieć, kiedy nie należy używać/tmpdo plików tymczasowych.