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.
.profile
wird beim Anmelden gelesen. Das Einfügen von Umgebungsvariablen.bashrc
funktioniert nicht, und Ihr Szenario zeigt Folgendes : Die (vermutlich GUI-) Anwendung, die diese Shell.bashrc
ausführt, sollte Ihre Umgebungsvariablen enthalten, aber wenn Sie sie definieren , funktioniert dies nicht. t.Die endgültige Antwort finden Sie im Abschnitt zur Bash- Manpage zu Bash-Startdateien . "Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist."
Antworten auf Ihre anderen Fragen weisen darauf hin, dass eshell nicht tatsächlich ausgeführt wird
bash
. Emacseshell
ist nichtbash
. Angenommen,eshell
das Laden wäre.bashrc
genauso fehlerhaft wie angenommenzsh
odercsh
geladen.bashrc
. Es ist eine andere Hülle.Ich sehe zwei Möglichkeiten:
bash
und Elisp-Code für generierteshell
.Vielleicht interessiert Sie auch die Diskussion über das Hinzufügen eines Verzeichnisses zu einem Pfad ohne Duplikate .
quelle
Das Einstellen Ihres Pfads in Ihrem ~ / .Profil sollte einfach funktionieren. Diese Datei wird beim Anmelden von jeder POSIX-kompatiblen oder Bourne-ähnlichen Shell gelesen, von der ich weiß, dass sie Bash enthält. Wenn Sie Änderungen an dieser Datei vornehmen, müssen Sie sich abmelden und erneut anmelden, damit die Änderungen wirksam werden. Da PATH Teil der Umgebung Ihres Anmeldevorgangs ist, sollte es in jede Shell exportiert werden, die Sie anschließend starten.
quelle