Problem
Ich habe eine virtuelle Ubuntu 11.04-Maschine und wollte meine Java-Entwicklungsumgebung einrichten. Ich habe folgendes getan
sudo apt-get install openjdk-6-jdk
Die folgenden Einträge wurden zu ~ / .bash_profile hinzugefügt
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
Speichern Sie die Änderungen und beenden Sie das Programm
Öffnen Sie erneut ein Terminal und geben Sie Folgendes ein
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
Es ist nichts passiert, als ob der Export von JAVA_HOME und seiner Hinzufügung zum PATH niemals durchgeführt worden wäre.
Lösung
Ich musste zu ~ / .bashrc gehen und den folgenden Eintrag gegen Ende der Datei hinzufügen
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Fragen
- Warum musste ich das tun? Ich dachte, bash_profile, bash_login oder profile in Abwesenheit dieser beiden werden zuerst vor bashrc ausgeführt.
- War in diesem Fall mein Terminal eine Nicht-Login- Shell?
- Wenn ja, warum führte su nach dem Terminal und dem Einfügen des Passworts kein Profil aus, bei dem ich auch die oben genannten Exporte eingestellt hatte?
.profile
sollte nur bezogen werden, wenn Sie sich einloggen..profile
Bash ignoriert, wenn.bash_profile
vorhanden. Siehe meine Antwort hier undman bash
für weitere Details..profile
.Sie können überprüfen, ob Ihre Bash-Shell als Login-Shell gestartet wurde, indem Sie Folgendes ausführen:
Wenn die Antwort lautet, führen
off
Sie keine Anmeldeshell aus.Lesen Sie im Abschnitt zum Aufrufen des Bash-Handbuchs, wie Bash verschiedene Konfigurationsdateien liest (oder nicht liest).
Auszug aus
man bash
:su
auf der anderen Seite startet eine Login-Shell auch nicht standardmäßig, Sie müssen sie dazu anweisen, indem Sie die--login
Option verwenden.quelle
Ich denke, es ist erwähnenswert, dass Sie die Standardeinstellung von gnome-terminal ändern können, um eine Login-Shell (dh bash -l) zu verwenden, indem Sie die Profileinstellungen bearbeiten.
Gehen Sie zu Bearbeiten -> Profileinstellungen -> Titel und Befehl. Aktivieren Sie die Option "Befehl als Anmeldeshell ausführen"
quelle
~/.bash_profile
Bewertung sehr schnell erfolgt, was wahrscheinlich der Fall ist. Eine gute Sache zu überprüfen ist, alle Anrufe zu anderen Prozessen zu vertreiben, die normalerweise ziemlich kostspielig sind.Wenn Sie ein Terminal öffnen oder ausführen, wird
su
die Shell nicht als Anmeldeshell, sondern als normale interaktive Shell ausgeführt. So liest es sich~/.bashrc
aber nicht~/.bash_profile
. Sie könnensu
mit der-l
Option ausführen, dass Ihre Shell als Anmeldeshell ausgeführt wird.Wenn Sie mit einer GUI arbeiten, wird die Shell normalerweise nie als Login-Shell ausgeführt
~/.bashrc
.quelle
TL; DR
Wird in der klassischen empfohlenen Ubuntu-Konfiguration
~/.bash_profile
nur zu bestimmten Gelegenheiten ausgewertet. Und es macht Sinn.Legen Sie Ihre Sachen in
~/.bashrc
, es wird jedes Mal ausgewertet.Ok, ich möchte verstehen, warum macht das Sinn?
Wichtige Punkte, um zu verstehen, was los ist:
Die "Login" -Zeit beträgt also normalerweise:
ssh
, da die Shell der Vater aller Prozesse ist, wird Ihre geladen~/.bash_profile
.gnome-session
für klassisches Ubuntu) für das Lesen zuständig sein.profile
.Ok, wo soll ich meine Sachen hinstellen?
Es ist ziemlich komplex, die ganze Geschichte ist hier . Aber hier ist ein Run-Down, der für Ubuntu-Benutzer ziemlich häufig ist. In Anbetracht dessen:
bash
Shell,~/.bash_profile
und folgen der Empfehlung , das Laden von~/.bashrc
in Ihre zu addieren~/.bash_profile
, um mindestens eine Datei zu erhalten, die unabhängig vom Aufrufmechanismus ausgewertet wird .Dies ist ein schneller Vorschlag, wo Dinge abgelegt werden sollen.
~ / .bashrc ( Wird bei jeder Gelegenheit ausgewertet , vorausgesetzt, Sie folgen der Empfehlung)
Für schnelle Auswertung Umgebungsvariablen und Code für Ihre Benutzer nur und bash-only - Befehlszeilenbenutzung (Aliase zum Beispiel). bashismus sind willkommen.
Es wird auf sich selbst geladen auf:
bash
screen
neuer Bereich oder neuer Tab (nichttmux
!)terminator
/gnome-terminal
...), wenn Sie die Option "Befehl als Anmeldeshell ausführen" nicht aktivieren .Und es wird bei allen anderen Gelegenheiten dank der vorherigen Empfehlung geladen.
~ / .bash_profile ( Wird nur bei bestimmten Gelegenheiten ausgewertet. )
Für langsame Auswertung Umgebungsvariablen und Code für Ihre Benutzer nur und Konsole-Sitzung Prozesse. bashismus sind willkommen. Es wird geladen auf:
tmux
neues Fenster oder Fenster (Standardeinstellungen), (nichtscreen
!)bash -l
,terminator
/gnome-terminal
...) nur, wenn Sie die Option "Befehl als Anmeldeshell ausführen" aktivieren.~ / .profile (Wird nur in einer grafischen Sitzung ausgewertet)
Für Umgebungsvariablen mit langsamer Auswertung und ohne Bashismus für Ihre Nur-Benutzer- und alle grafischen Sitzungsprozesse . Es wird beim Anmelden in Ihrer grafischen Benutzeroberfläche geladen.
quelle
.profile
wenn.bash_profile
sie nicht vorhanden ist.env
sehe ich nicht, dass env-Variablen gesetzt sind (ich habe versucht, iTerm zu schließen und erneut zu öffnen). Ich stelle jedoch fest, dass bei der Installation von Android Studio und anderen Apps alle diese Umgebungsvarianten aktiviert wurden/.bash_profile
. Als ich es hinzufügte/.bash_profile
, wirkte es wie ein Zauber. Warum ist das so?