TEMP vs TMP w zmiennych środowiskowych

20

Czy dobrze jest mieć te dwie zmienne środowiskowe TEMP i TMP? Jeśli wprowadzę zmiany w jednym, czy powinienem wprowadzić te same zmiany w drugim? Na przykład instalowałem cygwin, a wskazówki nakazały mi zmienić zmienną PATH, ale zarówno TEMP, jak i TMP mają zmienną path. Jaka jest różnica między nimi?

zrzut ekranu zmiennych środowiskowych

Nie wiem, dlaczego ludzie chcą to zobaczyć, ale oto wartości ścieżki: Ścieżka w TEMP: C: \ Program Files \ Common Files \ Microsoft Shared \ Windows Live; C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ Windows Live; C: \ Program Files (x86) \ NVIDIA Corporation \ PhysX \ Common;% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ Common Files \ Acronis \ SnapAPI \; C: \ Program Files (x86) \ Windows Kits \ 8.1 \ Windows Performance Toolkit \; C: \ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn \; C: \ Program Files (x86) \ Windows Live \ Shared

Ścieżka w TMP:% USERPROFILE% \ AppData \ Local \ Temp

Celeritas
źródło
Gdzie jest zmienna Path w temps Nie widzę jej na
zrzucie
@ Zaznacz, co to ma znaczenie?
Celeritas
@DavidMarshall co to ma znaczenie?
Celeritas
Moje pytanie nie dotyczy sposobu zmiany zmiennej ścieżki. A gdyby tak było, to odpowiedzi byłyby błędne, ponieważ mam na myśli to, że przy zmianie jakiejkolwiek zmiennej należy to zrobić na TEMP, TMP lub oba. I nie określasz.
Celeritas
3
Sprawdź ten artykuł Dlaczego istnieją zmienne środowiskowe TMP i TEMP i która z nich jest poprawna? Zgodnie z tym, TMPmoże być tym, który woli (ze względu na GetTempFileNamefunkcję) ...
aschipfl

Odpowiedzi:

10

Aby odpowiedzieć na pytanie konkretnie:

Jaka jest różnica między nimi?

Nie ma różnicy. Są to po prostu różne aliasy dla tej samej ścieżki. Jak wspomniał Mark, niektóre programy używają, %TMP%a inne używają %TEMP%. Windows domyślnie przypisuje obie do tej samej ścieżki, aby zapewnić spójność między różnymi programami, a nawet chronić przed błędami programistów, takimi jak używanie obu w tym samym programie.

Należy również pamiętać, że %Path%zmienna ma nic wspólnego z tym albo %TMP%albo %TEMP%. %Path%Jest to zmienna systemowa, natomiast %TMP%i %TEMP%są obie zmienne systemowe, jak i zmiennych użytkownika. Wersje systemowe prowadzą do C:\windows\TEMP. AFAIK, tylko użytkownik „Systemu” może faktycznie używać tych zmiennych, o czym świadczy prosty test; otwórz okno cmd i wpisz echo %TMP%lub echo %TEMP%, i zwraca ścieżkę zdefiniowaną w wersji użytkownika zmiennych. Ponieważ jednak %Path%nie ma wersji użytkownika (domyślnie), możesz to zrobić echo %Path%i zwraca wartość zmiennej systemowej.

Nie jestem do końca pewien, w jaki sposób programy wykorzystują zmienną systemową „Path”, co prawdopodobnie dotyczyło cygwina, ale niezależnie od tego, zapewniam cię, że nie ma to nic wspólnego z TMP ani TEMP.

Mam nadzieję, że to odpowiada na twoje pytanie.

EDYCJA: Właśnie sobie przypomniałem, po co %Path%- umożliwia dostęp do plików znajdujących się w dowolnej ze ścieżek określonych w zmiennej bez konieczności korzystania z pełnej ścieżki do pliku. Na przykład dodanie „C: \ myprog \ bin” do% Path% pozwoli Ci po prostu wpisać myproglub myprog --helpetc w wierszu poleceń bez konieczności wpisywania pełnej ścieżki, np "C:\myprog\bin\myprog.exe" --help. Oczywiście użycie wiersza polecenia jest tylko przykładem, pozwala każdemu programowi lub interfejsowi uzyskać dostęp do dowolnego rodzaju pliku bez potrzeby podawania pełnej ścieżki.

RyanayR
źródło
Są różne, niektóre programy używają jednego, a inne drugiego, więc potrzebujesz obu
user151019
Ciekawy. Nie mogę kompresować katalogów, ponieważ czasami dostaję odmowę dostępu. Zmieniając TEMP i TMP, %USERPROFILE%\AppData\Local\Tempnaprawiłem jeden z moich problemów, ale wygenerowałem wiele innych. Zmieniłem to z powrotem na C:\Windows\Temp. Jeśli istnieje wersja użytkownika, system może korzystać C:\Windows\Temp, podczas gdy ja mogę używać %USERPROFILE%\AppData\Local\Tempi wszyscy są zadowoleni. Dam temu szansę. Dzięki!
inf3rno
3

Potrzebujesz obu, ponieważ różne programy używają różnych.

Nie muszą być ustawione w tym samym miejscu, ponieważ tylko bardzo źle napisane programy będą korzystać z obu, zakładając, że wskazują na to samo.

/ tmp jest wspólnym katalogiem plików tymczasowych w systemie Unix, również używającym zmiennej środowiskowej TMPDIR

Z pamięci (kiedy używałem tego w połowie lat 80.) TEMP był pierwotnie używany w DOS-ie, a TMP był używany przez programy, które zostały przeniesione z Uniksa, aby pasowały do ​​/ tmp. Jednak kiedy programy zostały napisane w DOSie, ponieważ nie było kontroli, różni programiści używali różnych. W nowoczesnym systemie Windows domyślne ustawienia Microsoftu są takie same dla obu patrz ten dokument

użytkownik151019
źródło
2
W rzeczywistości standardowa zmienna SUS to TMPDIR. W normie nie ma wzmianki o jednym TMPlub TEMPobu, które wywodzą się ze świata DOS.
JdeBP
@J, SUS to ????
Pacerier
1
Trochę późno, ale: Pojedyncza specyfikacja UNIX.
Tim Diggins,