Mam skrypt, który musi utworzyć pliki tymczasowe do pracy i posprzątać po sobie. Moje pytanie dotyczy znalezienia odpowiedniego katalogu podstawowego dla plików tymczasowych.
Skrypt musi działać na wielu platformach: Git Bash (Windows), Solaris, Linux, OSX. Na każdej platformie preferowany katalog tymczasowy jest wyrażany inaczej:
- Windows:
%TMP%
(i ewentualnie%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: powinien być,
$TMPDIR
ale wydaje się być rozbrojony na wielu systemach, których próbowałem
Więc w swoim skrypcie dodałem ten szablon:
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
To wydaje się zbyt nudne. Czy jest lepszy sposób?
shell-script
directory
tmp
janos
źródło
źródło
${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.Odpowiedzi:
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:Możesz użyć go w skrypcie dość łatwo:
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ą ...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 to
mktemp
, że Mac OSX wymaga dostarczenia szablonu (który jest opcjonalnym argumentem w systemie Linux). Cytowanie: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ę, żemktemp
opiera się ona w$TMPDIR
razie potrzeby.Podsumowując, powinieneś być w stanie uzyskać taki sam wynik jak powyżej, używając ...
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.
źródło
gitbash
interfejsu powłoki, stąd moje „nieznacznie”. Nie byłbym w stanie powiedzieć, gdzie przechowywane są pliki tymczasowe w systemie Windows ...c:\User\Name\..............\stuff
. I jest ich prawdopodobnie 100. Mimo to niektóre dystrybucje linuksowe zbliżają się do tego samego poziomu szaleństwa/var
. Byłem tylko ciekawy. Uderzyło mnie to, jak dziwnie to ujmuję - z mojego doświadczenia frustracja jest bardzo przenośna, a wygoda mniej. W każdym razie bardzo dobra odpowiedź.WINDOWS/Temp
lubWindows/Temp
jako domyślny katalog dla swoich plików tymczasowych; ten katalog istnieje również na komputerach z systemem Windows 7. Ale mój skrypt pozwala użytkownikowi podać alternatywny katalog temp w wierszu poleceń.mktemp
.mktemp
po prostu działa: simplemktemp
zwraca plik imktemp -d
zwraca katalog; nie wymaga szablonów. Instrukcja nie jest aktualizowany chociaż.Jeśli szukasz tego samego w mniejszej liczbie wierszy ...
Możesz to napisać w jednym.
źródło
Możesz zrobić:
Powłoka powinna albo znaleźć katalog wykonywalny w jednej z 4 alternatyw, albo wyjść ze znaczącym błędem. Mimo to POSIX definiuje
$TMPDIR
zmienną (dla systemów XCU) :Wymaga również
/tmp
ścieżki.źródło