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_profileczy ten plik istnieje, a ~/.profilejeśli ~/.bash_profilenie 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 .profilezostanie 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ę ~/.profilenie 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_profileczyta się, jeśli istnieje, i ~/.profileinaczej; jeśli zalogujesz się za pomocą gdm, tylko ~/.profileczytane; jeśli zalogujesz się za pomocą xdm, ~/.profilenie 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.
.profilejest odczytywany po zalogowaniu. Wprowadzanie zmiennych środowiskowych .bashrcnie 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 eshellnie jest bash. Zakładanie, eshellże ładowanie byłoby .bashrctak samo błędne, jak zakładanie zshlub cshładowanie .bashrc. To inna skorupa.
Widzę dwie opcje:
bashi 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.