Co to jest zmienna PATH w systemie Unix i jak ją dodać?

11

Wiele samouczków dotyczących programowania wymaga od użytkowników dodania czegoś, PATHale nie wyjaśnia, co to jest. Istniejące zasoby, które wyjaśniają PATHnowym użytkownikom wiersz poleceń, nie są zbyt dobre.

  • Co to jest PATHzmienna Unix ?

  • Właśnie pobrałem program, a następnie próbowałem uruchomić polecenie w terminalu i dostałem command not found. Co to ma wspólnego z PATH?

  • Dodałem coś do tego za PATHpomocą tego polecenia, a potem wszystko działało:

    export PATH=/path/to/some/bin:$PATH
    

    ... ale potem command not foundznów dostałem, kiedy następnym razem uruchomiłem komputer. Jak mogę sprawić, aby pozostawał włączony za PATHkażdym razem, gdy otwieram Terminal?

  • Jak najlepiej ustalić, czy program taki jak Git gccjest już załadowany na mój komputer?

Kevin Burke
źródło
3
Przeczytałem wiele odpowiedzi na SO i nie znalazłem odpowiedzi, która odpowiada na każde z tych pytań w sposób zrozumiały dla początkujących. Chcę czegoś, z czym mogę połączyć nowych użytkowników wiersza poleceń. Miałem nadzieję, że dodam to jako wiki społeczności i dołączę do tego znaczną nagrodę.
Kevin Burke,
4
Założę się, że mogę znaleźć 50 trafień, jeśli szukam w Google tego pytania. Dlaczego nie
trojanfoe,
2
A jeśli żaden z tych linków nie wskazuje na SO dla pytania, które kwalifikuje się tutaj, należy je tutaj dodać. Chcemy, aby SO było tam, gdzie Google idzie na pytania dotyczące programowania.
Zapoznaj się z tym postem MSO z motywacjami Kevina do zadawania tego pytania. Najprawdopodobniej dokona edycji, aby wyjaśnić, w jaki sposób te informacje są pomocne.
jmort253,
1
@ jmort253: Cóż, powinien zacząć to robić szybko. 4/5 głosów bliskich. Nie zamknę, bo wiem, że chce edytować pytanie, ale lepiej, żeby to szybko.
Madara's Ghost,

Odpowiedzi:

17

Ścieżka UNIX to zmienna środowiskowa, która jest listą katalogów, w których można szukać programów, które próbujesz uruchomić. Pozwala to uniknąć konieczności używania pełnej nazwy ścieżki do uruchamiania takich rzeczy /bin/ls(na przykład poprzez wstawienie /binścieżki).

Na przykład ścieżka może składać się z:

/bin:/usr/bin:/usr/sbin

a to oznacza, że ​​po wpisaniu polecenia xyzzyspróbuje uruchomić pierwszy znaleziony plik z bieżącej listy:

/bin/xyzzy
/usr/bin/xyzzy
/usr/sbin/xyzzy

( może pomijać pliki niewykonywalne, jeśli jest sprytny).

Możesz dodawać elementy do ścieżki za pomocą polecenia:

set PATH=/directory/to/add:$PATH:/low/priority/path

które miejsca /directory/to/addna początku listy wyszukiwania ścieżek i /low/priority/pathna końcu.

Jednak zwykle zmienia się to tylko dla bieżącej powłoki. Jeśli chcesz wprowadzić zmiany w każdej powłoce, powinieneś dodać tę linię do jednego z plików startowych, takich jak $HOME/.profilelub /etc/profile. Właściwy plik do użycia zależy od samej powłoki i od ustawień plików startowych. Nie zawsze łatwo jest powiedzieć, gdzie powinien się udać, ale reguły są ogólnie wyjaśnione na stronie podręcznika dla jakiejkolwiek powłoki, której używasz.

Zazwyczaj można znaleźć polecenie na ścieżce za pomocą jednego z:

which cmd
whence cmd

zlokalizować cmdplik wykonywalny. Na przykład w moim systemie Debian otrzymuję następujący zapis:

pax> which ls
/bin/ls

pax> which firefox
/usr/bin/firefox

pax> which xyzzy

pax> 

źródło
1
Czy to pytanie należy do stackoverflow?
trojanfoe,
@trojanfoe, podobnie jak każde pytanie dotyczące powłoki, tak, tak sądzę. Jest to także język programowania.
Zmodyfikowałem odpowiedź, tak aby używała jej :jako separatora, ponieważ jest używana w * nix. Windows używa ;(prawdopodobnie dlatego, że :ma już znaczenie w C:).
Joachim Sauer,
W rzeczywistości, @Joachim, bardziej poprawne jest stwierdzenie, że dana powłoka (a nie sam UNIX) ma określony separator katalogów, ale jesteś odpowiedni dla wszystkich tych, których używam z góry głowy. Dzięki za poprawkę, na zdrowie.
@paxdiablo: tak, myślałem o tym, ale ja też nie mogę wymyślić żadnej powłoki uniksowej, która nie używa :(na przykład w Javie path.separatorjest zawsze :na * nix).
Joachim Sauer,
5

Co jest?

Zmienna środowiskowa PATH to rozdzielona dwukropkami lista katalogów, które przeszukuje twoja powłoka po wprowadzeniu polecenia.

Jak to ustawić?

PATH=$PATH:/your/directory
export PATH

Jak mogę sprawić, by pozostawał na ŚCIEŻCE za każdym razem, gdy otwieram Terminal?

Wstaw dwa poprzednie wiersze do środka ~/.bash_profile(jeśli używasz bashterminala).

Pigueiras
źródło
3

PATH to zmienna środowiskowa dla systemów typu unix.

ustaw ścieżkę:

export PATH=$PATH:<your path>

nieuzbrojona ścieżka:

unset $PATH

ustaw ścieżkę na stałe

w folderze domowym włącz Widok -> Pokaż ukryte pliki .... pióro .bash_profile plik, przed eksportem wiersza ŚCIEŻKA, dodaj ten wiersz .....

PATH=$PATH:<yourpath>

wyloguj się i zaloguj ponownie ...... sprawdź, czy działa ... dobrze! powinno działać .....

Shantanu Banerjee
źródło
1
Przepraszamy za opinię, ale jest ona źle sformatowana i sformułowana. Staraj się unikać nadmiernego używania odważnego, nadmiernego używania elipsy („...”) i pisz pełne zdania. To powinno pomóc w przyszłości uniknąć takich negatywnych opinii.
Joachim Sauer,
1
@Jachachim Sauer, dlaczego nie edytujesz odpowiedzi? Dlaczego wolisz to głosować?
1
@MikroDel: ponieważ są już lepsze, lepszej jakości odpowiedzi na to pytanie, a głosowanie w dół wymaga mniej wysiłku. Gdyby to była jedyna odpowiedź, prawdopodobnie bym ją zredagował. Ponadto: chociaż zazwyczaj nie są zabawne, głosy przychodzące są uzasadnionym narzędziem (tak, obok każdego pytania / odpowiedzi znajdują się strzałki w górę i w dół).
Joachim Sauer,
1
edytuj lub opublikuj ten komentarz w tym samym czasie, ale edytuj, aby był lepszy i pomóż Shantanu Banerjee i innym użytkownikom
@MikroDel: więc wyjaśnienie uzasadnienia downvote nie pomaga użytkownikowi? Wydaje mi się, że dość jasno rozumowałem i podałem praktyczne wskazówki dotyczące poprawy jakości. Jedyne, co sprawia, że ​​nalegasz, zmniejsza moją gotowość do wyjaśniania moich głosów negatywnych (i jak widać w moim profilu, nie głosuję nadmiernie).
Joachim Sauer,