Gemäß der Antwort auf Was sind Login- und Nicht-Login-Shells? Unter Ask Ubuntu ist GNOME Terminal eine Art Nicht-Login-Shell.
Wie in dem ausgezeichneten Buch A Practical Guide to Fedora and Red Hat Enterprise Linux, 6th Edition ausgeführt :
eine interaktive Shell ohne Anmeldung führt Befehle in der Datei ~/.bashrc aus. Die Standarddatei ~/.bashrc ruft /etc/bashrc.
auf
Als Ergebnis /etc/profile
wird nicht in einer Nicht-Login-Shell verarbeitet. Ich habe jedoch festgestellt, dass ich den Java-Home-Pfad an den PATH
angehängt habe
Variable und wenn ich GNOME Terminal verwende und den Befehl java
ausführe , alles geht gut. Auch der Wert von PATH
Variable ist derselbe wie der Wert, den ich in /etc/profile
definiert habe .
Angesichts der oben genannten Tatsachen gibt es einen Konflikt, was ist falsch an meinem Verständnis?
Akzeptierte Antwort:
Wenn Sie sich über einen Display-Manager oder in einem tty bei Ihrer x-Sitzung anmelden, /etc/profile
wird (normalerweise – anscheinend ist es in Ihrem Fall der Fall, obwohl einige grafische Shells es nicht lesen) von Ihrem Shell-Programm bezogen. Danach eine lokale Datei (ich nehme an, Sie verwenden hier bash) ~/.bash_profile
, ~/.bash_login
oder ~/.profile
wird bezogen, und alle hier definierten Umgebungsvariablen überschreiben /etc/profile
für den aktuellen Benutzer. Diese Umgebung wird geerbt durch jede Shell, die Sie innerhalb der Sitzung öffnen. Aus diesem Grund können wir in diesen Dateien Umgebungsvariablen wie Ihren PATH definieren.
Wenn Sie gnome-terminal öffnen, ja, wird standardmäßig eine Nicht-Login-Shell gestartet, aber es erbt Ihre Benutzerumgebung, die bereits von der Login-Shell oder der grafischen Shell geladen wurde. Seit ~/.bashrc
beim Starten einer interaktiven Shell (z. B. beim Öffnen von gnome-terminal) abgerufen wird, kann es verwendet werden, um einige zu überschreiben Elemente der Umgebung (z. B. PS1).
(gnome-terminal selbst ist eine Anwendung, keine Shell)