Co to jest PATH i inne zmienne środowiskowe i jak mogę je ustawić lub używać?

341

Pytania o

  • ustawianie zmiennych środowiskowych
  • PATH

są tutaj bardzo powszechne, aw większości przypadków odpowiedzi są do siebie bardzo podobne. W przyszłości byłoby miło mieć dobre Q / A do tego.

Pytanie brzmi: czym są zmienne środowiskowe, takie jak plik wykonywalny PATH, i jak mogę je zmienić i używać w głównych systemach operacyjnych?

Dobra odpowiedź obejmowałaby proste wyjaśnienie, jakie zmienne środowiskowe, a szczególnie PATHoznaczają dla systemu operacyjnego, a także proste wytyczne, jak odpowiednio je ustawić i odczytać.

slhck
źródło
2
Zmęczony koniecznością robienia tego ręcznie za każdym razem, gdy musiałem, napisałem kilka wpisów rejestru, aby dodać wpisy menu kontekstowego dla AddToPath i RemoveFromPath do folderów, korzystając z bezpłatnej aplikacji o nazwie pathed.exe. Poniżej znajduje się link do pełnego przewodnika: addictivetips.com/windows-tips/… Teraz mogę bardzo łatwo dodawać foldery do zmiennej PATH lub usuwać je z niej, bez konieczności edytowania jakiegokolwiek pliku lub martwienia się o popsucie formatowania zmiennej . Mam nadzieję, że to pomoże. =)
Haroon Q. Raja
1
W systemie Windows istnieje skrót do otwierania właściwości Systemu, tj. Panel sterowania -> System To klawisz WIN na klawiaturze + Pauza / Przerwa (WIN + Przerwa). Jest to niezwykle pomocne i przyspiesza proces ustawiania nowych zmiennych środowiskowych w Win8, ponieważ musisz kliknąć kilka okien w nowoczesnym interfejsie użytkownika (Tak. Jeśli jest nowoczesny, wyhoduję kaktusa na mojej dłoni), co jest po prostu denerwujące. Oczywiście możesz stworzyć skrypt PowerShell lub użyć polecenia setx i nie martw się o to: D
termil0r
W systemie Windows 8 najszybszą nawigacją do zmiany zmiennych systemowych i środowiskowych użytkownika jest wyszukiwanie. <kbd> Win </kbd> + <kbd> W </kbd> uruchamia wyszukiwanie wszystkich ustawień. Wyszukaj envi potrzebne opcje są na liście.
FRIdSUN
Myślę, że jest to szybsze i bardziej przejrzyste poprzez otwieranie CMDi pisanie setlub PowerShellpisanie Get-Childitem env:.
paradroid
Jeśli często edytujesz zmienną ścieżkową (na przykład podczas konfigurowania nowego systemu), może pomóc skrót do okna dialogowego Właściwości systemu na pulpicie. Aby to zrobić, kliknij prawym przyciskiem pulpit, wybierz Nowy skrót i wpisz systempropertiesadvanced.exe. Następnie możesz kliknąć łącze, aby przejść do okna dialogowego Właściwości systemu, a następnie kliknąć Zmienne środowiskowe, aby przejść do okna dialogowego z ustawieniami ścieżki.
Brian Burns

Odpowiedzi:

334

Co to są zmienne środowiskowe?

Zmienne środowiskowe przechowują wartości związane z bieżącym środowiskiem, takie jak system operacyjny lub sesje użytkownika.

Ścieżka

Jeden z najbardziej znanych nazywa się PATHw systemach Windows, Linux i Mac OS X. Określa katalogi, w których na komputerze znajdują się programy wykonywalne *, które można uruchomić bez znajomości i wpisania całej ścieżki do pliku w wierszu poleceń . (Lub w systemie Windows okno dialogowe Uruchom w menu Start lub Win+ R).

W systemach Linux i Mac OS X, to zwykle trzyma wszystko bini sbinkatalogów istotne dla bieżącego użytkownika. W systemie Windows zawiera przynajmniej katalogi C:\Windowsi C:\Windows\system32- dlatego możesz uruchamiać calc.exe lub notepad.exez poziomu wiersza poleceń lub okna dialogowego Uruchom , ale nie firefox.exe. (Firefox znajduje się w C:\Program Files\Mozilla Firefox. Aby uzyskać informacje o tym, jak dołączyć Firefox, przejdź tutaj .)

Na przykład wpisanie calc( .exe można pominąć) w wierszu poleceń w systemie Windows spowoduje uruchomienie kalkulatora Windows.

* Możesz dodać obsługę rozszerzeń plików innych niż .exepoprzez edycję %PATHEXT%.

Inny

Inne zmienne mogą informować programy, jakiego rodzaju terminal jest używany ( TERMw systemie Linux / Mac OS X) lub, w systemie Windows, gdzie znajduje się folder Windows (np. %WINDIR%Jest C:\Windows).

Tworzenie nowych zmiennych środowiskowych

W systemach Windows, Linux i Unix możliwe jest tworzenie nowych zmiennych środowiskowych, których wartości są następnie udostępniane wszystkim programom po uruchomieniu.

Można tego użyć podczas pisania skryptów lub programów, które są instalowane lub wdrażane na wielu komputerach i muszą odwoływać się do wartości specyficznych dla tych komputerów. Podczas gdy podobny efekt można osiągnąć za pomocą ustawień konfiguracji specyficznych dla programu, łatwiej jest to zrobić za pomocą zmiennej środowiskowej, jeśli wiele programów potrzebuje dostępu do tej samej wartości.

 

Windows

GUI

  1. Otwarte Control Panel » System » Advanced » Environment Variables.

  2. Wpisz control sysdm.cpl,,3w oknie dialogowym Uruchom ( Win+ R) i kliknij Environment Variables.
    Do edycji zmiennych użytkownika możesz także wpisać

    %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
    

    w oknie dialogowym Uruchom.

  3. Kliknij prawym przyciskiem myszy (Mój) Komputer i kliknij Właściwości lub po prostu naciśnij Win+ Break.

    • W XP kliknij Advanced » Environment Variables.
    • W Vista + kliknij Advanced system settings » Environment Variables.
  4. Istnieje wiele innych sposobów dotarcia do tego samego miejsca, na przykład poprzez wpisanie „zmiennych środowiskowych” w polu wyszukiwania Menu Start / ekran i tak dalej.

Zmienne środowiskowe w systemie Windows są podzielone na wartości specyficzne dla użytkownika i maszyny / systemu. Możesz tam przeglądać i edytować ich wartości. Ich aktualne wartości po uruchomieniu są udostępniane wszystkim programom.

Dostępny jest również Rapid Environment Editor , który pomaga ustawiać i zmieniać zmienne środowiskowe w systemie Windows bez potrzeby wchodzenia w ustawienia systemowe. Innym programem typu open source dla systemu Windows, za pomocą którego można bardzo wygodnie edytować środowisko ścieżki, jest Edytor ścieżki .

Wiersz poleceń

Format

Zmienne środowiskowe w systemie Windows są oznaczone znakami procentowymi (%) otaczającymi nazwę:

%name%

Echo

Aby wyświetlić wartość zmiennej środowiskowej cmd.exe, wpisz echo %name%.

C:\>echo %USERPROFILE%
C:\Users\Daniel

zestaw

Aby utworzyć / ustawić zmienną, użyj set varname=value:

C:\>set FunnyCatPictures=C:\Users\Daniel\Pictures\Funny Cat Pictures

C:\>set FunnyCatPicturesTwo=%USERPROFILE%\Pictures\Funny Cat Pictures 2

Aby dodać / dodać zmienną, użyj set varname=value;%varname%:

C:\>set Penguins=C:\Linux

C:\>set Penguins=C:\Windows;%Penguins%

C:\>echo %Penguins%
C:\Windows;C:\Linux

Zmienne środowiskowe ustawione w ten sposób są dostępne (przez resztę) czasu trwania wiersza polecenia, w którym są ustawione, i są dostępne dla procesów, które są uruchamiane po ustawieniu zmiennych.

setx

Aby utworzyć / ustawić zmienną na stałe , użyj setx varname "value":

C:\>setx FunnyCatPictures "C:\Users\Daniel\Pictures\Funny Cat Pictures"

[Restart CMD]

C:\>echo %FunnyCatPictures%
C:\Users\Daniel\Pictures\Funny Cat Pictures

W przeciwieństwie do tego setnie ma znaku równości, a wartość powinna być ujęta w cudzysłów, jeśli zawiera spacje. Zauważ, że zmienne mogą rozwinąć się do ciągu ze spacjami (np. %PATH%Staje się C:\Program Files), dlatego najlepiej jest umieszczać cudzysłowy wokół wartości zawierających dowolne zmienne.

Musisz ręcznie dodać setxdo wersji systemu Windows wcześniejszej niż Vista.
Narzędzia obsługi systemu Windows XP z dodatkiem Service Pack 2

Lista zmiennych środowiska Windows

Oto lista domyślnych zmiennych środowiskowych wbudowanych w system Windows. Niektóre przykłady to: %WINDIR%, %SystemRoot%, %USERPROFILE%, i %APPDATA%. Podobnie jak większość nazw w systemie Windows, wielkość liter nie uwzględnia wielkości liter.

 

Pochodne Unixa (FreeBSD, GNU / Linux, OS X)

Zmienne środowiskowe w systemie Linux są poprzedzone znakiem dolara ($), takim jak $ HOME lub $ HOSTNAME. Wiele dobrze znanych i standardowych zmiennych zapisanych jest dużymi literami, aby to dokładnie zaznaczyć. Pamiętaj, że w nazwach zmiennych rozróżniana jest wielkość liter, co oznacza, że ​​$ User i $ USER są całkowicie niezwiązane z punktu widzenia powłoki.

Pochodne uniksowe definiują ogólnosystemowe zmienne w skryptach powłoki zlokalizowanych głównie w /etcfolderze, ale wartości specyficzne dla użytkownika mogą być podane tym zmiennym w skryptach znajdujących się w folderze domowym (np. /etc/profile, $HOME/.bash_profile). .profilePlik w katalogu domowym jest częstym miejscem do definiowania zmiennych użytkownika.

Ustawianie zmiennych

Te pliki są zwykłymi skryptami powłoki i mogą zawierać więcej niż deklaracje zmiennych środowiskowych. Aby ustawić zmienną środowiskową, użyj export. Aby wyświetlić aktualnie zdefiniowane zmienne środowiskowe w terminalu, uruchom env.

exportKomenda jest standardowym sposobem definiowania zmiennych. Składnia jest bardzo intuicyjna. Wynik jest identyczny dla tych dwóch linii, ale pierwsza alternatywa jest lepsza w przypadku, gdy konieczna jest przenośność w stosunku do powłoki Bourne sprzed POSIX.

var=value; export var
export var=value

Powłoka C i jej potomkowie używają zupełnie innej składni; tam polecenie jest setenv.

Zobacz projekt dokumentacji Linuksa, Path HOWTO, aby uzyskać bardziej szczegółową dyskusję na ten temat.

Być może wbrew powszechnemu przekonaniu OS X jest bardziej „uniksowy” niż Linux. Oprócz wspomnianych już plików $ PATH można modyfikować w tych plikach:

  • /etc/pathszawiera wszystkie domyślne katalogi dodane do ścieżki, takie jak /bini /usr/sbin.
  • Dowolny plik /etc/paths.d- powszechnie używany przez instalatorów, aby udostępnić udostępniane przez nich pliki wykonywalne z powłoki bez dotykania ogólnosystemowych lub specyficznych dla użytkownika plików konfiguracyjnych. Te pliki zawierają po prostu jedną ścieżkę w wierszu. np. / Programs / Mozilla / Calendar / bin.

 

Linki zewnętrzne:

Zmienne środowiskowe w XP
Windows XP Service Pack 2 Narzędzia obsługi (w tym setx)
Zmienne środowiskowe w Windows Vista i Windows 7
Dodawanie plików wykonywalnych do okna dialogowego Uruchom
Porady Mac OSX - Ustawianie zmiennych środowiskowych
TLDP: Ścieżka Howto

Daniel Beck
źródło
10
W systemie Windows Vista i nowszych można używać SETXdo wprowadzania trwałych zmian. Ma nieco inną składnię. SETXnależy dodać z Windows Server 2003 Resource Kitwcześniejszych wersji NT.
paradroid
1
@paradroid Nice, nie wiedziałem o tym (nie użytkownik systemu Windows). Ten temat to wiki społeczności. Możesz przejść do edycji tych informacji.
Daniel Beck
2
@JdeBP Tytuł sekcji miał wskazywać, jak ustawić te wartości w interfejsie użytkownika , który w Windows nazywa się powłoką , w przeciwieństwie do poniższej sekcji, interfejsu wiersza poleceń . Zredagowałem to zanim jeszcze zobaczyłem twój komentarz 10 godzin temu. Nikt nigdy nie wspominał, że dotyczy to tylko Eksploratora.
Daniel Beck
1
@JdeBP Odpowiedź, do której się odnosisz, tak naprawdę nie ma zastosowania w tym przypadku, ponieważ mówiłeś o ustawianiu wartości w rejestrze. Ustawienia za pomocą okna dialogowego będą nadawać, jak WM_SETTINGCHANGEmi się wydaje, i dlatego powiadamiają zainteresowane strony o nowych wartościach. Dlatego zapytałem, jak to się tutaj stosuje. Pogrubienie tekstu nie zmienia jego znaczenia i nie ułatwia zrozumienia, podobnie jak powtarzanie tego samego zdania, tylko głośniejsze. Zredagowałem ten post kilka godzin temu, aby wyraźnie wspomnieć, że wartości otrzymywane przez procesy są ustawiane po ich uruchomieniu.
Daniel Beck
3
@JdeBP Możesz również zauważyć, że pytanie ma charakter raczej podstawowy. Dokładne wyjaśnienie zawiłości sposobu dystrybucji zmian zmiennych środowiskowych (poważnie WM_SETTINGCHANGE? Windows API? To nie jest publiczność tego pytania!) Może nie być dobrym pomysłem, ponieważ może dezorientować czytelnika zamiast wyjaśniać, o czym te zmienne są .
Daniel Beck
64

Ten post jest z bardziej technicznego punktu widzenia niż Daniel, ale nie wyjaśnia tyle pojęć.


Artykuł w Wikipedii jest również doskonałym odnośnikiem.

Linux i większość BSD

W większości powłok wiersza poleceń tymczasowe zmienne środowiskowe są ustawiane za pomocą poleceń export(sh, bash, zsh) lub setenv(csh, tcsh).

  • Przykłady poprzedzania $HOME/bindo $PATHw bash lub zsh:

    export PATH="$HOME/bin:$PATH"
    

    (W tym konkretnym przypadku nie exportjest konieczne, ponieważ PATHjest już częścią środowiska.)

  • csh, tcsh:

    setenv PATH "$HOME/bin:$PATH"
    

Trwałe zmienne środowiskowe można ustawić na kilku oddzielnych etapach:

  • Zaloguj sie:

    • Konfiguracja sesji logowania: Linux pam_env, który zwykle czyta/etc/environment

    • Logowanie do terminala: pliki „profilu” powłoki.

      • bashwykorzystuje /etc/profilei pierwsza z: ~/.bash_profile, ~/.bash_login, ~/.profile. bash(1)Sekcja strony podręcznika Wywołanie .

        Często plik profilu użytkownika zawiera również jawne wywołanie ~/.bashrc.

      • zsh: zsh(1)Sekcja strony podręcznika Pliki uruchamiania / zamykania .

      • csh i inne powłoki: patrz odpowiednie strony podręcznika.

    • Logowanie graficzne: Nie jestem pewien; może się różnić w zależności od menedżera logowania. GDM wydaje się czytać ~/.profilew moim systemie.

  • Otwarcie okna terminala:

    • bashwykorzystuje /etc/bash.bashrci ~/.bashrc.

Seria Windows NT

  • W wierszu polecenia ( cmd.exe) użyj set name=valuedo zmiany zmiennych środowiskowych dla tego okna.

    Aby dołączyć c:\bindo %PATH%, użytkowania:

    set path=%path%;c:\bin
    

    Wpływa to tylko na ten cmd.exeproces i wszelkie nowe procesy z niego uruchomione.

  • Aby wprowadzić trwałe zmiany, użyj Panelu sterowania → System → Zaawansowane → Zmienne środowiskowe . ( dokumenty )

    Uwaga: Podczas gdy ustawienia użytkownika zwykle zastępują ustawienia systemowe, PATHzmienna jest obsługiwana specjalnie: zarówno ustawienia systemowe, jak i ustawienia użytkownika są scalane w ostateczną wartość.

    Zmiany są zapisywane w Rejestrze (patrz poniżej) i natychmiast stosowane do wszystkich nowych procesów utworzonych przez Eksploratora (powłokę graficzną), na przykład za pośrednictwem menu Start.

  • Zmienne środowiskowe dla całego systemu są przechowywane w rejestrze HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmenti ładowane podczas uruchamiania systemu.

    Środowisko użytkownika jest przechowywane HKCU\Environmenti ładowane podczas logowania użytkownika.

  • Domyślnie system szuka również setpoleceń w AUTOEXEC.NTpliku.

MS-DOS, 16-bitowy system Windows, seria Windows 9x

  • W MS-DOS Prompt ( command.com) użyj set name=value, podobnie jak w WinNT.

    Podobnie, setinterakcyjne działanie wpływa tylko na to jedno command.comwystąpienie, wraz z wszelkimi nowymi uruchomionymi z niego procesami.

  • Aby wprowadzić trwałe zmiany, dodaj lub edytuj odpowiednie setlinie w C:\AUTOEXEC.BAT, a następnie uruchom ponownie.

    • Obejście, aby uniknąć ponownego uruchomienia, w systemie Windows 9x: otwórz okno Monit MS-DOS, ustaw odpowiednie zmienne, zamknij istniejący proces Eksploratora ( Start → Zamknij → trzymając Ctrl + Shift, kliknij Anuluj ), uruchom explorer.exez okna Monit MS-DOS .

VMS

(Nie mogłem się oprzeć.)

DCL nie ma pojęcia „ścieżka”, ale można wprowadzić różne definicje symboli i poleceń SYS$LOGIN:LOGIN.COM.

grawitacja
źródło
2
Sekcja VMS jest nieprawidłowa. DCL ma DCL$PATHdla „ automatycznych poleceń obcych ”.
JdeBP
9

W przypadku globalnych (nieterminalnych) zmiennych środowiskowych bashpowłoki PATHpostępuję zgodnie z konwencją używaną podczas instalacji maszyny Wirtualnej Ubuntu - inne powłoki będą się różnić:

Zastrzeżenie: Rozruch sekwencja cała powłoka, która .bashrc, .profileitp pliki są pozyskiwane w jakiej kolejności ?, kiedy mam do ponownego logowania, aby uzyskać wgląd do nowo zdefiniowanych zmiennych, aliasy itd ?, jaka jest różnica między logowania , interaktywna i nieinteraktywna powłoka - używam cron? i dlaczego, kiedy to robię, . ~/.bashrcmoja głupia PATHzmienna rośnie coraz dłużej? to kluczowe pytania, które przychodzą mi na myśl, gdy myślę o mojej PATHzmiennej.

W rzeczywistości właśnie całkowicie napisałem cały zestaw plików startowych bash, czerpiąc pomysły z plików szkieletu Ubuntu i cygwin, a oto niektóre z moich stron:

  1. Wyeksportuj PATHi inne globalne zmienne środowiskowe (tj. LD_LIBRARY_PATH) Zmienne w .profile;
  2. Użyj logiki ~/.profiledo źródła, $HOME/.bashrcjeśli istnieje;
  3. Wykonaj ogrodzenie ~/.bashrcz testem do wykonania interaktywnego, w przeciwnym razie wyjdź;
  4. Umieść wszystkie aliasy, shoptmonity, kontrolę historii, konfigurację terminali, definicję funkcji itp. (Konfiguracja związana z interaktywnymi) w części ~/.bashrcchronionej, aby działała tylko w trybie interaktywnym;
  5. Pozbądź się innych plików startowych bash, ponieważ ich istnienie określa, czy ścieżka kontrolna działa .profilei .bashrcdziała zgodnie z oczekiwaniami. To znaczy, chyba że istnieją szczególne wymagania, aby zrobić inaczej, usuń ~/.bash_profile& ~/.bash_login;
  6. Kiedy pojawi się monit bash i muszę zaktualizować domyślną konfigurację, edytuję ~/.bashrcplik, a następnie po prostu go pobieram, . ~/.bashrcaby uzyskać zmiany w mojej bieżącej powłoce.
  7. Kiedy dokonuję zmiany w zmiennej środowiskowej, takiej jak PATH, muszę zmodyfikować i pobrać moje ~/.profile;
  8. Dzwonię do fink, portowania i warzenia określonych ustawień .profile.

To moje 2 centy na ten temat.

Billy McCloskey
źródło
7

P: CO TO są zmienne środowiskowe?

Odp .: Zmienne środowiskowe są podobne do zmiennych w dowolnym języku programowania. W przypadku systemów Windows lub Unix przechowują różne wartości, aby umożliwić programom i zadaniom uzyskanie niezbędnych informacji o systemie operacyjnym lub informacji o środowisku. Na przykład:

USERPROFILE: katalog użytkowników w plikach systemu operacyjnego.

MAIL: gdzie można znaleźć pocztę użytkownika w plikach systemu operacyjnego.

P: CO konkretnie jest zmienną PATH?

Odp .: Zmienna PATH ustawia ścieżki katalogu, które będą sprawdzane podczas wykonywania poleceń, zarówno dla poleceń RUN, jak i dla wewnętrznych wywołań programów. Zapobiega to znajomości miejsca instalacji przez program w celu wywołania innych procesów wykonywalnych.

Sprawdza zmienną PATH systemu środowiska Windows i testuje każdą lokalizację dla danego pliku wykonywalnego. W ten sposób dodanie położenia do zmiennej PATH umożliwia bezpośrednie wywołanie pliku wykonywalnego.

Zgodnie z tym artykułem z Wikipedii :

Po wprowadzeniu polecenia w powłoce poleceń lub wywołaniu systemowym przez program w celu wykonania programu, system najpierw przeszukuje bieżący katalog roboczy, a następnie przeszukuje ścieżkę, badając każdy katalog od lewej do prawej


P: JAK dodać lokalizację do zmiennej PATH?

Odp .: Musisz edytować ciąg zmiennej zmiennej PATH Zmiennych środowiskowych, aby uwzględnić lokalizację pliku wykonywalnego.

Jeden ze sposobów na to opisano tutaj :

  1. Otwórz menu Start i kliknij prawym przyciskiem myszy Komputer. Wybierz Właściwości.
  2. Wybierz Zaawansowane ustawienia systemu.
  3. Na karcie Zaawansowane wybierz Zmienne środowiskowe.
  4. Wybierz EDYCJA lub NOWY. (dla ŚCIEŻKI najprawdopodobniej chcesz EDYTOWAĆ).
  5. Dodaj ścieżkę lokalizacji. na przykład:C:\wamp\bin\php\php5.5.12;

Mam nadzieję, że to wyjaśnia pewne zamieszanie.

użytkownik945389
źródło