Jak dodać katalog do ŚCIEŻKI?

729

Jak dodać katalog do $PATHUbuntu i wprowadzić zmiany na stałe?

justingrif
źródło
2
help.ubuntu.com/community/EnvironmentVariables Jest wszystko, co musisz wiedzieć. Dowiedziałem się, że wiele danych tutaj jest niepoprawnych lub przynajmniej metoda nie została zasugerowana. Jest to świetna informacja, która pozwoli ci dowiedzieć się, gdzie zmodyfikować zmienną środowiskową w oparciu o powód, dla którego to robisz, i dokładnie, jak to zrobić bez zepsucia wszystkiego (tak jak zrobiłem po niektórych z wyżej wymienionych złych rad). Tak długo i dziękuję za wszystkie ryby!
Bus42

Odpowiedzi:

456

Użycie ~ / .profile, aby ustawić $ PATH

Ścieżka ustawiona w .bash_profilezostanie ustawiona tylko w powłoce logowania bash ( bash -l). Jeśli podasz swoją ścieżkę .profile, będzie dostępna dla całej sesji pulpitu. Oznacza to, że nawet metacity go wykorzysta.

Na przykład ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

Przy okazji możesz sprawdzić zmienną PATH procesu, patrząc na jego środowisko /proc/[pid]/environ(zastąp [pid] liczbą od ps axf). Np. Użyjgrep -z "^PATH" /proc/[pid]/environ

Uwaga:

bashponieważ powłoka logowania nie analizuje .profile, .bash_profileczy .bash_loginistnieje lub istnieje. Od man bash:

szuka ~ / .bash_profile, ~ / .bash_login i ~ / .profile, w tej kolejności oraz odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny.

Zobacz odpowiedzi poniżej informacje na temat .pam_environment, czy .bashrcdla powłok interaktywnych bez logowania, lub ustawić wartość globalnie dla wszystkich użytkowników poprzez umieszczenie skryptu do /etc/profile.d/lub korzystania /etc/X11/Xsession.d/wpływać na sesję menedżera wyświetlania.

ko-dos
źródło
5
Fajnie, działało. Widziałem, gdzie automatycznie doda katalog bin, jeśli to zrobię, więc użyłem go zamiast skryptów. TY.
justingrif
5
Na Xbunutu plik .profile nie jest wykonywany, więc wstawiłem go do pliku .bashrc i działa.
tekumara,
13
Ta dokumentacja jest bardzo dobrze wykonana: Oficjalna dokumentacja o zmiennej środowiskowej . Zastanów się nad jego przeczytaniem (żeby nie powiedzieć, że jest zaktualizowany do ostatniej wersji reguł, aby dodać wartości do zmiennej środowiskowej).
Michele
3
Gdzie w .profile dodajemy ścieżkę?
Vineet Kaushik,
3
Nadal nie mam pojęcia, gdzie dodać moją dodatkową ścieżkę. Muszę dodać zestaw SDK Androida do mojej ścieżki ... PATH="$HOME/bin:$PATH"Więc dodaję go?
Jamie Hutber,
301

Edytuj .bashrcw swoim katalogu domowym i dodaj następujący wiersz:

export PATH="/path/to/dir:$PATH"

Musisz wprowadzić swoje dane .bashrclub wylogować się / zalogować (lub ponownie uruchomić terminal), aby zmiany zostały wprowadzone. Aby uzyskać źródło .bashrc, po prostu wpisz

$ source ~/.bashrc
Ophidian
źródło
3
Jak „pozyskujesz .bashrc”? Jak „ponownie uruchomić terminal”?
izomorfizmy
3
W bash to po prostu ”. .bashrc '
Ophidian
1
Zakładałem, że jesteś w swoim katalogu domowym. ponieważ tam właśnie znajduje się plik .bashrc, który chcesz edytować.
Ophidian
21
.bashrcnie jest właściwym miejscem do ustawiania zmiennych środowiskowych. Powinny wejść .profilelub .pam_environment. Zobacz mywiki.wooledge.org/DotFiles
geirha
4
@LaoTzu . .bashrcnie .bashrc:) czy source .bashrco to chodzi
Znarkus
120

Zalecane miejsce do zdefiniowania stałych, ogólnosystemowych zmiennych środowiskowych mających zastosowanie do wszystkich użytkowników to:

/etc/environment

(gdzie PATHzdefiniowane jest ustawienie domyślne )

Będzie to działać na komputerze stacjonarnym lub konsoli, gnome-terminal lub TTY, deszcz lub połysk;)

  • Aby edytować, naciśnij Alt+ F2i wpisz:

    gksudo gedit /etc/environment
    

    (lub otwórz plik za pomocą sudoswojego ulubionego edytora tekstu)

Aby wprowadzić zmiany, uruchom . /etc/environment. Ponieważ ten plik jest prostym skryptem, zostanie uruchomiony i przypisze nową ścieżkę do PATHzmiennej środowiskowej. Aby sprawdzić, uruchom env i zobacz PATHwartość na liście.

Związane z:

ish
źródło
6
a następnie musisz zrestartować się, aby zmiany odniosły skutek ...
Lee
2
Właśnie tego potrzebowałem. Udostępnianie obrazu vm wyrzucanego przez włóczęgę i konieczne było dodanie węzła i npm do ścieżki.
Austin Pray
7
Aby wprowadzić zmiany w działaniu, uruchom. / etc / environment (tak, kropka, spacja i / etc / environment). Ponieważ ten plik jest tylko prostym skryptem, zostanie uruchomiony i przypisze nową ścieżkę do zmiennej środowiskowej PATH. Aby sprawdzić, uruchom env i zobacz wartość PATH na liście.
WindRider
1
Musiałem uruchomić, source /etc/environmentaby ponownie załadować zmiany
JohnnyAW
@JohnnyAW: source jest równoważne początkowej kropce, patrz na przykład en.wikipedia.org/wiki/Source_(command) .
Roland Sarrazin
58

Myślę, że kanonicznym sposobem w Ubuntu jest:

  • utwórz nowy plik pod /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • dodaj tam:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • i zezwolić na wykonanie

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    
woto
źródło
20
Zazwyczaj bezpieczniej jest dodać niestandardową ścieżkę na końcu ŚCIEŻKI zamiast na początku. Pozwala to uniknąć przypadkowego zastąpienia poleceń systemowych programami (lub złośliwymi programami innych osób). Pozwala to również uniknąć wielu nieporozumień, gdy ktoś inny pracuje w twoim systemie (lub udziela ci rad) i uzyskuje nieoczekiwane wyniki z poleceń, które „zastąpiłeś”.
Joe,
47

Dla kompletnych początkujących (tak jak ja), którzy czują się bardziej komfortowo z GUI:

  1. Otwórz swój $HOMEfolder.
  2. Przejdź do WidokPokaż ukryte pliki lub naciśnij Ctrl+ H.
  3. Kliknij prawym przyciskiem myszy .profilei kliknij polecenie Otwórz za pomocą edytora tekstu .
  4. Przewiń w dół i dodaj PATH="$PATH:/my/path/foo".
  5. Zapisać.
  6. Wyloguj się i zaloguj ponownie, aby zastosować zmiany (niech Ubuntu faktycznie się załaduje .profile).
dain
źródło
4
Edycja pliku .profile nie jest już zalecana. Nadal możesz użyć tej metody do edycji pliku .pam_environment patrz: help.ubuntu.com/community/EnvironmentVariables
PulsarBlow
Dziękujemy, @PulsarBlow! Nie jestem pewien, co to dokładnie jest różnica i choć korzyści ... Jest to bezpośredni adres URL do odpowiedniej sekcji: help.ubuntu.com/community/...
Dain
1
Ta odpowiedź spowodowała, że ​​mój system przestał się logować z powodu zastąpienia wszystkich ścieżek. Korzystanie z Ubuntu 16.04.
Frisbetarian
1
@Frisbetarian musisz koniecznie dodać $PATH:bit, który zawiera istniejącą definicję ŚCIEŻKI
dain
@dain: Twój komentarz uratował mi życie!
Py-ser,
46

Dla trwałych zmiennych środowiskowych dostępnych tylko dla konkretnych użytkowników. Bardzo polecam oficjalną dokumentację Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

Nawiązując do powyższej dokumentacji, skonfigurowałem narzędzia ścieżki SDK systemu Android poprzez:

  1. tworzenie ~/.pam_environmentpliku w katalogu domowym.
  2. którego treść jest PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. dodatkową niestandardową ścieżkę użytkownika można dodać, oddzielając ścieżki dwukropkiem (:) .
  4. wymaga to ponownego zalogowania , co oznacza, że ​​musisz się wylogować i zalogować ponownie do środowiska pulpitu.
Eduardo B.
źródło
1
To najlepsza odpowiedź.
Paulo Coghi,
26

Umieść tę linię w swoim ~/.bashrcpliku.

Pozyskiwany jest za każdym razem, gdy otwierasz terminal

EDYCJA : W oparciu o poniższe komentarze, aby uzyskać bardziej ogólne ustawienie, które będzie obowiązywać dla wszystkich powłok (w tym po wciśnięciu Alt- F2w Unity), dodaj linię do ~/.profilepliku. Prawdopodobnie nie powinno to robić obu, ponieważ ścieżka zostanie dodana dwukrotnie do PATHśrodowiska, jeśli otworzysz terminal.

Ian B.
źródło
1
Właściwie myślałem, że ustawiłeś ścieżkę $HOME/.profiledla ustawień osobistych lub /etc/profiledla wszystkich użytkowników. Ale jeśli jest to potrzebne tylko do bash, przypuszczam, że albo zadziała.
Marty Fried
1
Jeśli go włączysz ~/.bashrc, będzie dostępny tylko w otwartych terminalach. Np. Jeśli naciśniesz Alt + F2 i spróbujesz uruchomić polecenie z tego katalogu, nie znajdzie go. Jeśli ustawisz go w ~/.profilelub ~/.pam_environment, sesja gnome (lub którykolwiek DE użyjesz) odziedziczy go. Dołączenie PATH ~/.bashrcma również tę wadę, że jeśli otworzysz / wykonasz bash interaktywnie z innej interaktywnej powłoki bash, zostanie on dodany wiele razy.
geirha
2
Od dłuższego czasu nie analizowałem tego, więc przeprowadziłem wyszukiwanie i wydaje się, że istnieje co najmniej 95 różnych sposobów wyznaczania ścieżki, z których większość jest tutaj omawiana . Nigdy nie wiedziałem, który jest najlepszy. Myślę jednak, że ~/.profilewłaściwe są ścieżki osobiste; tam Ubuntu dodaje ~/binkatalog. Przyznaję, że trochę przesadziłem na wiele sposobów - tylko trochę.
Marty Fried
1
@MartyFried, tak, aby zacytować bota w #bash na freenode: «Zdecydowana większość skryptów, kodu, samouczków i przewodników bash w Internecie to bzdury. Sturgeon był optymistą. »Używając Google'a do problemu bash, często znajdziesz wiele półpracujących rozwiązań, zanim znajdziesz dobre. Och, ja też bym poszedł ~/.profilew tym przypadku.
geirha
1
@geirha - Zgadzam się, że większość przewodników w Internecie to chyba bzdury, zwłaszcza linux, ponieważ różne dystrybucje, a nawet różne wersje tego samego, działają inaczej. Zwykle sprowadza się do tego, co działa, ale większość ludzi nie zdaje sobie sprawy, że to, co działa, to po prostu to, co działa, niekoniecznie to, co jest właściwe, a nawet to, co zawsze będzie działać. Próbuję dowiedzieć się, który z wielu sposobów jest właściwy, ponieważ nienawidzę robić rzeczy więcej niż raz - ale nie zawsze jest to łatwe. :)
Marty Fried
15

Aby ustawić na cały system, dołącz linię export PATH=/path/you're/adding:$PATHna końcu /etc/profile.

Aby dodać katalog tylko dla zalogowanego użytkownika, dodaj tę samą linię do ~/.bash_profile.

ennuikiller
źródło
14

Dodanie go do .bashrc będzie działać, ale myślę, że bardziej tradycyjny sposób konfigurowania zmiennych ścieżki to .bash_profile poprzez dodanie następujących linii.

PATH=$PATH:/my/path/foo
export PATH

Zgodnie z tym wątkiem wydaje się, że zachowanie Ubuntu jest nieco inne niż RedHat i klony.

3dinfluence
źródło
1
Nie mam pliku .bash_profile. Czy powinienem go utworzyć?
justingrif
7
Jeśli tak .bashrc, włóż .bashrczamiast tego. Terminale GUI w Ubuntu nie są powłokami logowania, więc .bash_profilenie będą uruchamiane.
1
Nie używam powłoki GUI. Ale z powyższego wątku wygląda na to, że .bashrc będzie działał dobrze.
justingrif
2
Oba będą działać, jeśli twoja powłoka jest powłoką logowania. Ale właśnie wypróbowałem podejście .bash_profile na jednym z moich komputerów Ubuntu i nawet po ponownym uruchomieniu sesji gnome nie pozyskało mojego .bash_profile. Powiedziałbym więc, że umieszczenie tego w .bashrc jest prawdopodobnie najlepszym sposobem na Ubuntu.
3dinfluence
3
@ justingrif Nie, nie potrzebujesz .bash_profile. Jeśli bash nie znajdzie .bash_profile(gdy logujesz się interaktywnie), poszuka go .profilei użyje zamiast tego. Domyślnie będziesz mieć .profileiw .bashrcUbuntu. I .profilejest właściwym miejscem do ustawienia zmiennych środowiskowych, jeśli pominiemy pam_env.
geirha
10

W terminalu cddothe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

To nie był mój pomysł. Znalazłem ten sposób na eksport ścieżki na tym blogu tutaj .

Vittorio Cecchetto
źródło
8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

dodaj tam

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Jorge Castro
źródło
2
sudo nano /etc/profile.d/SCRIPT_NAME.shjest łatwiejszy dla początkujących.
izomorfizmy
1
Dla początkujących gksu gedit /etc/profile.d/SCRIPT_NAME.shjest jeszcze łatwiejsze.
Fouric
6

Ilekroć „instaluję” mój folder skryptów BASH, wykonuję test testu dla $HOME/binfolderu, który zawiera większość plików .profile w najnowszych wersjach Ubuntu. Ustawiam test, który wygląda

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Działa tylko około 100% czasu i pozwala mi go zmieniać w edytorze tekstowym GUI z szybkim „Zamień wszystko”, jeśli kiedykolwiek zdecyduję się przenieść /scriptsgdzieś bliżej mojego $HOMEfolderu. Nie zrobiłem tego w 6 instalacjach Ubuntu, ale jest „zawsze jutro”. S.

BZT

Silversleevesx
źródło
6

Zalecany sposób edycji PATHto z /etc/environmentpliku

Przykładowe dane wyjściowe /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Na przykład, aby dodać nową ścieżkę /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Następnie uruchom ponownie komputer.


Zmienne środowiskowe dla całego systemu

Odpowiednim plikiem dla ustawień zmiennych środowiskowych, które wpływają na system jako całość (a nie tylko konkretnego użytkownika) jest / etc / environment. Alternatywą jest utworzenie pliku do tego celu w katalogu /etc/profile.d.

/ etc / environment

Ten plik jest przeznaczony specjalnie dla systemowych ustawień zmiennych środowiskowych. To nie jest plik skryptu, ale raczej składa się z wyrażeń przypisania, po jednym w wierszu.

Uwaga: Rozszerzenie zmienne nie działa w / etc / environment.

Więcej informacji można znaleźć tutaj: EnvironmentVariables

Benny
źródło
1
Najniższa jak dotąd najbardziej poprawna odpowiedź. Ten plik jest zwykle automatycznie wypełniany binem Ubuntu ze ścieżką.
NotoriousPyro
4

Otwórz terminal, wpisz gedit .profilei wstaw następujące dane:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Zamknij i otwórz terminal, powinien działać.

djavier
źródło
2

Umieść go na swoim ~/.bashrclub w Whatsvershell, którego używasz rc (lub wcześniej wspomnianym ~/.profile) ORAZ ~/.xsessionrctak, aby działał również w X (poza powłoką).

Mikaela
źródło
1

Nawet jeśli skrypty systemowe tego nie używają, w żadnym z przypadków, w których chce się dodać ścieżkę (np. $HOME/bin) Do zmiennej środowiskowej PATH, należy użyć

PATH="${PATH:+${PATH}:}$HOME/bin"

do dołączania (zamiast PATH="$PATH:$HOME/bin") i

PATH="$HOME/bin${PATH:+:${PATH}}"

do dodawania (zamiast PATH="$HOME/bin:$PATH").

Pozwala to uniknąć fałszywego wiodącego / końcowego okrężnicy, gdy $PATHjest początkowo pusty, co może mieć niepożądane skutki.

Patrz np. Https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset

sancho.s
źródło
-1

W systemie Ubuntu dokonaj edycji ~/.bashrci dodaj następujący wiersz.

. ~/.bash_profile

Następnie zmodyfikuj plik .bash_profile, jeśli potrzebujesz .....

Jorge Castro
źródło
1
Odebrano, ponieważ nie wyjaśniłeś, jak „edytować swoje, .bash_profilejak potrzebujesz”. Co dokładnie muszę zrobić z .bash_profile?
izomorfizmy
4
To jest zły sposób. .profilelub .bash_profilepowinien źródło .bashrc. Nie na odwrót.
geirha