Jak zmodyfikować moją ŚCIEŻKĘ, aby zmiany były dostępne w każdej sesji terminalu


53

Chcę dodać katalog, aby przeszukać moją ścieżkę wyszukiwania. Wiem, że muszę zmodyfikować PATHzmienną środowiskową. Chcę jednak, aby zmiana była trwała, aby zawsze obowiązywała dla każdego okna Terminal (bash), które otwieram.

W https://help.ubuntu.com/community/EnvironmentVariables występuje przeciążenie mylących i prawdopodobnie sprzecznych informacji

Używam Ubuntu 10.04. Załóżmy, że chcę dodać /usr/local/foodo mojego PATH. Który plik ( .bashrc, .profile, .bash_login, etc ...) należy zmodyfikować, a co powinno nowa linia (s) wygląda?

Odpowiedzi:


70

Następujące polecenie dodaje ścieżkę do bieżącej ścieżki:

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

Jeśli chcesz, aby Instalator wykonywał to polecenie za każdym razem, istnieje wiele miejsc, w których możesz je umieścić. Po zalogowaniu następujące skrypty zostaną wykonane w tej kolejności:

/etc/profile      (which starts by loading everything in /etc/profile.d)
~/.profile        (which starts by loading ~/.bashrc if you are running bash)

Notatki

  • ~/.profile jest ładowany tylko wtedy, gdy ~/.bash_profilei ~/.bash_loginNIE ISTNIEJE. W przeciwnym razie przynajmniej bash załaduje je zamiast tego. Wskazane jest używanie .profileskryptów specyficznych dla bash. Jeśli więc utworzyłeś te próby .bash_login, usuń je teraz.

  • ~/.bashrcjest ładowany tylko wtedy, gdy prowadzisz sesję interaktywną. (coś z pytaniem, w którym można coś wpisać).

  • ~/.bashrcjest ładowany wielokrotnie za każdym razem, gdy otwierasz nowy terminal . Nowa karta w gnome-terminal, nowy terminal wirtualny itp. Więc nawet jeśli nie zalogujesz się ponownie, .bashrcjest ładowany (a tym samym resetuje swoje środowisko) za każdym razem, gdy otwierasz nową powłokę.

  • Rzeczy takie jak Byobu powinny się naprawdę zainteresować .profile(inaczej nie zadziała ;-)

  • Takie rzeczy jak ścieżki powinny się znaleźć, .profilejeśli chcesz, aby działały poza sesjami interaktywnymi. (powiedz, kiedy naciśniesz Alt+ F2w GNOME)


Oznaczę to jako odpowiedź, jeśli zaktualizujesz go tak, aby zawierał żądany wiersz eksportu, który powinien zostać dodany do pliku .profile.
Joshua Flanagan

To było ważne tylko dla logowania do konsoli (np. Ssh lub terminale wirtualne dostępne dla Ctrl + Alt + Fx). Nie wiedziałem, że / etc / gdm / Xsession sources ~ / .profile. Schludny!
Marius Gedminas,

Tak, nie wspomniałem konkretnie o / etc / gdm / Xsession ani ~ / .Xprofile, ponieważ istnieją lepsze sposoby uruchamiania programów graficznych podczas uruchamiania, co gwarantuje, że reszta środowiska jest już załadowana.
Ralf,

1
aby ta odpowiedź była bardziej wyczerpująca, dodaj komentarz MattH na temat pozyskiwania ~ / .profile, aby aktywować zmiany bez wylogowywania / cyklu.
matt wilkie

1
@schwiz: ~/.profilenie jest wykonywany na każdym terminalu, jest wykonywany przed rozpoczęciem sesji pulpitu. Ten wykonywany na każdym terminalu to~/.bashrc
MestreLion

13

Zmusiłem go do działania, modyfikując ~/.profile

Wygląda na to, że dodanie ~ / bin do mojej ścieżki było złym przykładem, ponieważ w ~ / .profile jest już kod do zrobienia tego automatycznie, jeśli katalog istnieje.

Aby dodać katalog usr / local / foo do mojej ścieżki dla każdej kontynuowanej sesji, dodaję / edytuję następujący wiersz na końcu mojego .profile:

export PATH=$PATH:/usr/local/foo

Aby jednak zadziałało, musiałem się wylogować i zalogować ponownie (po prostu zamknięcie okna terminala i otwarcie nowego NIE działało).


4
Zrób to export PATH="$PATH:/usr/foo", na wypadek gdybyś kiedykolwiek miał spacje lub inne znaki specjalne $PATH.
Gilles „SO- przestań być zły”

3
Możesz ponownie załadować bieżące środowisko bez wylogowania, wpisując „. ~ / .Profile”
Matt H

1
@MattH: nie, nie możesz. jeśli źródło ~/.profilew danym terminalu, to będzie skuteczne dla danego terminala tylko
MestreLion

@MestreLion - masz rację. Wspominałem o tym dla wygody obecnego terminala. Zapomniałem to dodać.
Matt H

Co jeśli mam już coś w ŚCIEŻCE? Czy mogę do niego dołączyć, aby PATHS działał w systemie Windows? Na przykład mam PATH="$HOME/bin:$HOME/.local/bin:$PATH"już.
Gabriel Fair

4

Aby ponownie załadować plik .profile i wprowadzić zmiany bez wylogowania / logowania, uruchom:

source ~/.profile

ten powinien być komentarzem do poprzedniej odpowiedzi
Pavlo Zhukov

3

Możesz dodać ścieżkę do /etc/environment, ale pamiętaj, że żadne rozszerzenia powłoki nie będą działać; zmienna zostanie ustawiona na dosłownie wprowadzone znaki.


Którą z dwóch metod (dodanie polecenia eksportu w .profile i dodanie pełnej ścieżki do PATH w etc / environment), które powinny być preferowane?
Rohan Bhatia

1

Możesz zmodyfikować .bashrcplik w swoim $HOMEkatalogu.

Na samym końcu tego pliku dodaj wiersz:

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

Możesz również zmodyfikować .profileplik, również w swoim $HOMEkatalogu, w tym w następującym wierszu:

PATH="$HOME/directory_to_include_in_path/:$PATH"

To zadziałało dla mnie.


2
Nie rozumiem, co to dodaje do innych odpowiedzi, które wyjaśniają dokładniej.
Zanna

0

Jeśli masz ohmyzsh, masz swój katalog domowy przez terminal i wpisz

nano .zshrc

Na końcu pliku wpisz

export PATH = "$ HOME / katalog_do_włączenia_ścieżki /: $ PATH"

Na koniec uruchom ponownie terminal. Pracował dla mnie. Mam nadzieję, że to było pomocne.


-3
Going through the basics, I will suggest the following steps:
1. It's recommended to set environment variables in /etc/environment
2. Open the file as superuser in an editor as it's a read only file e.g.     gedit:
gksu gedit /etc/environment
3. System will need password to open it in editable mode. Enter your superuser password and get file opened in a new gedit window. 
4. Add new line at the end of file with 
export PATH=$PATH:/usr/local/foo
5. Save and close the window. It will get command back to terminal.
6. Refresh the environment by running the following command: 
. /etc/environment
7. You may check by executing the following command:
 echo $PATH

To jest niepoprawne i nie będzie działać. Rozszerzanie parametrów nie jest wykonywane w/etc/environment
Zanna
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.