Problem
Mam maszynę wirtualną Ubuntu 11.04 i chciałem skonfigurować środowisko programistyczne Java. Zrobiłem w następujący sposób
sudo apt-get install openjdk-6-jdk
Dodano następujące wpisy do ~ / .bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
Zapisz zmiany i wyjdź
Ponownie otwórz terminal i wpisz następujące polecenie
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
Nic się nie stało, tak jakby eksport JAVA_HOME i jego dodatku do ŚCIEŻKI nie został nigdy wykonany.
Rozwiązanie
Musiałem przejść do ~ / .bashrc i dodać następujący wpis na końcu pliku
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
pytania
- Dlaczego musiałem to zrobić? Myślałem, że bash_profile, bash_login lub profil w przypadku braku tych dwóch zostaną najpierw wykonane przed bashrc.
- Czy w tym przypadku moja Terminal A non-login shell?
- Jeśli tak, to dlaczego wykonując su po terminalu i wprowadzając hasło, nie wykonał on profilu, w którym również ustawiłem wyżej wymienione eksporty?
.profile
należy pozyskiwać tylko po zalogowaniu..profile
ignorowane przez bash, jeśli.bash_profile
istnieje. Zobacz moją odpowiedź tutaj iman bash
po więcej szczegółów..profile
.Możesz sprawdzić, czy twoja powłoka Bash jest uruchomiona jako powłoka logowania, uruchamiając:
Jeśli odpowiedź brzmi:
off
nie korzystasz z powłoki logowania.Przeczytaj sekcję wywołania instrukcji Bash dotyczącą sposobu, w jaki Bash czyta (lub nie czyta) różne pliki konfiguracyjne.
Fragment
man bash
:su
z drugiej strony również domyślnie nie uruchamia powłoki logowania, musisz to powiedzieć, używając--login
opcji.źródło
Myślę, że warto wspomnieć, że możesz zmienić domyślny terminal gnome, aby używać powłoki logowania (tj. Bash -l), edytując preferencje profilu.
przejdź do Edycja -> Preferencje profilu -> zakładka Tytuł i polecenie zaznacz opcję „Uruchom polecenie jako powłokę logowania”
źródło
~/.bash_profile
ocena jest bardzo szybka, co prawdopodobnie ma miejsce. Dobrą rzeczą do sprawdzenia jest wygaszanie wszelkich połączeń z innymi procesami, które zwykle są dość kosztowne.Jeśli otworzysz terminal lub uruchomisz
su
powłokę, powłoka nie zostanie wykonana jako powłoka logowania, ale jako zwykła powłoka interaktywna. Więc czyta,~/.bashrc
ale nie~/.bash_profile
. Możesz uruchomićsu
z-l
opcją, aby uruchomić powłokę jako powłokę logowania.Kiedy pracujesz z GUI, powłoka zwykle nigdy nie działa jako powłoka logowania, więc zazwyczaj wszystko jest w porządku
~/.bashrc
.źródło
TL; DR
W klasycznej zalecanej konfiguracji ubuntu
~/.bash_profile
jest oceniany tylko w określonych przypadkach. I to ma sens.Włóż swoje rzeczy
~/.bashrc
, będą oceniane za każdym razem.Ok, chcę zrozumieć, dlaczego to ma sens?
Kluczowe punkty, aby zrozumieć, co się dzieje:
Czas „logowania” zazwyczaj wynosi:
ssh
, ponieważ powłoka będzie ojcem całego procesu, załaduje twój~/.bash_profile
.gnome-session
dla klasycznego Ubuntu) będzie odpowiedzialny za czytanie.profile
.Ok, więc gdzie położyć moje rzeczy?
Jest to dość skomplikowane, pełna historia jest tutaj . Ale tutaj jest zaniedbanie, które jest dość powszechne dla użytkowników Ubuntu. Biorąc pod uwagę, że:
bash
powłoki,~/.bash_profile
i postępuj zgodnie z zaleceniami, aby dodać ładowanie~/.bashrc
w swoim~/.bash_profile
, aby uzyskać co najmniej jeden plik, który zostanie oceniony bez względu na mechanizm wywoływania .To szybka sugestia, gdzie umieścić rzeczy.
~ / .bashrc (Pobiera oceniane za każdym razem , pod warunkiem przestrzegania zaleceń)
Dla szybkiej oceny zmiennej środowiskowej i kodu dla użytkownika tylko i bash tylko użycia wiersza polecenia (aliasy na przykład). bashism są mile widziane.
Ładuje się na:
bash
screen
nowy panel lub karta. (nietmux
!)terminator
/gnome-terminal
...), jeśli nie zaznaczysz opcji „uruchom polecenie jako powłoka logowania”.I zostanie załadowany na wszystkie inne okazje dzięki wcześniejszej rekomendacji.
~ / .bash_profile (Pobiera oceniany tylko przy konkretnej okazji )
Na zwolnionym oceny zmiennej środowiskowej i kodu dla użytkownika tylko i konsola-sesyjnych procesów. bashism są mile widziane. Jest ładowany na:
tmux
nowe okienko lub okna (ustawienia domyślne), (niescreen
!)bash -l
,terminator
/gnome-terminal
...) tylko jeśli zaznaczysz opcję „uruchom polecenie jako powłoka logowania”.~ / .profile (Pobiera oceniane tylko w sesji graficznej)
Dla zmiennych środowiskowych powolnych i bez bashizmu dla procesów użytkownika i wszystkich sesji graficznych . Zostaje załadowany po zalogowaniu w graficznym interfejsie użytkownika.
źródło
.profile
jeśli.bash_profile
nie istnieje.env
, nie zobaczę ustawionych zmiennych env (próbowałem zamknąć iTerm i ponownie otworzyć). Ale zauważam, że kiedy zainstalowałem Android studio i inne aplikacje, wszystkie te zmienne środowiskowe zostały włączone/.bash_profile
. Więc kiedy dodałem/.bash_profile
to działało jak urok. Dlaczego?