Odpowiedzi:
Tradycyjnie miejscem definiowania zmiennych środowiskowych dla poszczególnych użytkowników w systemach uniksowych jest ~/.profile
. Ten plik jest odczytywany przez powłokę logowania (tj. Program uruchamiany podczas logowania i do którego można wpisywać polecenia), pod warunkiem, że powłoka logowania jest powłoką kompatybilną z Bourne.
Bash jest powłoką kompatybilną z Bourne. Gdy jest wywoływany, gdy powłoka logowania odczytuje, ~/.bash_profile
czy ten plik istnieje, a ~/.profile
jeśli ~/.bash_profile
nie istnieje.
Zasadniczo, jeśli wpiszesz hasło w trybie tekstowym (np. Na konsoli tekstowej lub zdalnie za pomocą ssh), wówczas otrzymana powłoka jest powłoką logowania.
Jeśli jednak wpiszesz hasło w programie graficznym i zalogujesz się w środowisku graficznym, ominie to normalną powłokę logowania. To, czy .profile
zostanie odczytane w tym przypadku, zależy od konfiguracji sesji graficznej; na przykład różni się między dystrybucjami Linuksa, menedżerami wyświetlania i środowiskami pulpitu. Czasami jeden z programów w łańcuchu jawnie wywołuje powłokę logowania; czasami jeden z programów wyraźnie czyta ~/.profile
; a czasem nic z tego się ~/.profile
nie dzieje i nie można go odczytać.
Podam przykład zmienności, o ile mogę stwierdzić po szybkim spojrzeniu na zaangażowane skrypty, na Ubuntu 10.04: jeśli logujesz się za pomocą kdm lub lxdm, ~/.bash_profile
czyta się, jeśli istnieje, i ~/.profile
inaczej; jeśli zalogujesz się za pomocą gdm, tylko ~/.profile
czytane; jeśli zalogujesz się za pomocą xdm, ~/.profile
nie zostanie odczytany.
Wszystkie znane mi systemy zapewniają pewien sposób ustawiania zmiennych środowiskowych dla poszczególnych użytkowników. Niestety nie ma ogólnej odpowiedzi.
Zauważ, że czasami zobaczysz zalecenia, aby albo ustawić zmienne środowiskowe ~/.bashrc
, albo uruchomić powłokę logowania na każdym terminalu w środowisku GUI. Oba są złymi pomysłami; jednym z powodów jest występujący problem, a mianowicie to, że zmienne środowiskowe były dostępne tylko w programach uruchamianych za pomocą terminala, a nie w programach uruchamianych bezpośrednio za pomocą ikony lub menu lub skrótu klawiaturowego.
.profile
jest odczytywany po zalogowaniu. Wprowadzanie zmiennych środowiskowych .bashrc
nie działa, a twój scenariusz pokazuje, że: aplikacja (prawdopodobnie GUI), która uruchamia tę powłokę, powinna mieć twoje zmienne środowiskowe, ale jeśli je zdefiniujesz .bashrc
, to nie będzie t.
Ostateczna odpowiedź znajduje się w sekcji strony podręcznika bash w Bash Startup Files . „Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, Bash odczytuje i wykonuje polecenia z ~ / .bashrc, jeśli plik istnieje.”
Odpowiedzi na inne pytania wskazują, że eshell nie działa bash
. Emacs eshell
nie jest bash
. Zakładanie, eshell
że ładowanie byłoby .bashrc
tak samo błędne, jak zakładanie zsh
lub csh
ładowanie .bashrc
. To inna skorupa.
Widzę dwie opcje:
bash
i elisp eshell
.Być może zainteresuje Cię dyskusja na temat dodawania katalogu do ścieżki bez duplikatów .
Ustawienie PATH w pliku ~ / .profile powinno po prostu działać. Plik ten jest odczytywany przy logowaniu przez każdą powłokę zgodną z POSIX lub podobną do Bourne'a, o której wiem, w tym bash. Jeśli wprowadzisz zmiany w tym pliku, będziesz musiał się wylogować i zalogować ponownie, aby zmiany odniosły skutek. Ponieważ PATH jest częścią środowiska twojego procesu logowania, należy go wyeksportować do każdej powłoki, którą uruchomisz później.