Traditionell ist der Ort, an dem Umgebungsvariablen pro Benutzer auf Unix-Systemen definiert werden ~/.profile
. Diese Datei wird von der Anmeldeshell gelesen (dh von dem Programm, das beim Anmelden gestartet wird und in das Sie Befehle eingeben können), sofern die Anmeldeshell eine Bourne-kompatible Shell ist.
Bash ist eine Bourne-kompatible Shell. Wenn es als Login-Shell aufgerufen wird, wird gelesen, ~/.bash_profile
ob diese Datei vorhanden ist und ~/.profile
ob ~/.bash_profile
sie nicht vorhanden ist.
Als Faustregel gilt: Wenn Sie Ihr Kennwort im Textmodus eingeben (z. B. auf einer Textkonsole oder remote mit ssh), ist die Shell, die Sie erhalten, eine Anmeldeshell.
Wenn Sie jedoch Ihr Kennwort in ein grafisches Programm eingeben und in einer grafischen Umgebung angemeldet werden, wird die normale Anmeldeshell umgangen. Ob .profile
in diesem Fall gelesen wird, hängt davon ab, wie die grafische Sitzung eingerichtet ist. Beispielsweise variiert es zwischen Linux-Distributionen, zwischen Display-Managern und zwischen Desktop-Umgebungen. Manchmal ruft eines der Programme in der Kette explizit eine Anmeldeshell auf. manchmal liest eines der Programme explizit ~/.profile
; und manchmal passiert nichts davon und ~/.profile
wird nicht gelesen.
Um ein Beispiel für die Variabilität zu geben, soweit ich anhand eines kurzen Blicks auf die beteiligten Skripte unter Ubuntu 10.04 erkennen kann: Wenn Sie sich mit kdm oder lxdm anmelden, ~/.bash_profile
wird gelesen, ob es existiert, und ~/.profile
ansonsten; Wenn Sie sich mit gdm anmelden, wird nur ~/.profile
gelesen. Wenn Sie sich mit xdm anmelden, ~/.profile
wird nicht gelesen.
Alle mir bekannten Systeme bieten eine Möglichkeit, Umgebungsvariablen pro Benutzer festzulegen. Leider gibt es keine allgemeine Antwort.
Beachten Sie, dass manchmal Empfehlungen zum Festlegen von Umgebungsvariablen ~/.bashrc
oder zum Starten einer Anmeldeshell in jedem Terminal in einer GUI-Umgebung angezeigt werden. Beides sind schlechte Ideen; Einer der Gründe ist das Problem, das Sie hatten, nämlich dass Ihre Umgebungsvariablen nur in Programmen verfügbar waren, die über ein Terminal gestartet wurden, und nicht in Programmen, die direkt mit einem Symbol, einem Menü oder einer Tastenkombination gestartet wurden.