Ja, das ist das erwartete Verhalten.
Das Verhalten ist, kurz gesagt, wie folgt:
- bash startete als interaktive Login-Shell: liest
~/.profile
- bash wurde als interaktive Shell ohne Anmeldung gestartet: reads
~/.bashrc
Weitere Informationen finden Sie im bash-Handbuch zu Startdateien .
Persönlich halte ich dieses Verhalten für seltsam und habe noch keine Erklärung für diese Entwurfsentscheidung gefunden.
Einige Erklärungen zur Terminologie:
- Eine interaktive Shell ist eine Shell, mit der Sie interagieren können, dh, Sie können darin Befehle eingeben. Die meisten Shells, die Sie verwenden, sind interaktive Shells.
- Eine nicht interaktive Shell ist eine Shell, mit der Sie nicht interagieren können. Shell-Skripte werden in nicht interaktiven Shells ausgeführt.
- Eine Login-Shell ist die Shell, die gestartet wird, wenn Sie sich bei Ihrem System anmelden.
- Eine Nicht-Login- Shell ist eine Shell, die nach dem Login-Vorgang gestartet wird.
Die meisten Shells, die Sie sehen, sind interaktive Shells ohne Anmeldung . Dies gilt insbesondere dann, wenn Sie eine grafische Umgebung wie gnome ausführen, da gnome dann die "Anmeldeshell" ist. Jede Bash-Sitzung, die in gnome gestartet wird, ist eine Nicht-Login-Shell. Wenn Sie eine echte interaktive Anmeldeshell sehen möchten, gehen Sie zu einer virtuellen Konsole (mit Ctrl+Alt+F1) und melden Sie sich mit Ihrem Benutzernamen und Kennwort an. Das ist eine echte interaktive Login-Bash-Shell. Sie können mit zur grafischen Shell zurückkehren Ctrl+Alt+F7.
Es gibt eine Option, mit --loginder sich Bash so verhält, als wäre es eine Anmeldeshell, auch wenn sie nach dem Anmelden gestartet wurde. Wenn Sie Gnome-Terminal so konfigurieren, dass Bash als Anmeldeshell gestartet wird, wird Bash mit dieser --loginOption gestartet .
Normalerweise soll die Bash immer ~/.bashrcin einer interaktiven Shell gelesen werden . Hier ist, wie ich das empfehle:
Erstellen Sie eine ~/.bash_profileDatei. Wenn bash als Login-Shell gestartet wird, ~/.bash_profilesucht es zuerst nach, bevor es danach sucht ~/.profile. Wenn bash findet ~/.bash_profile, wird es nicht gelesen ~/.profile.
Fügen Sie die folgenden Zeilen ein ~/.bash_profile:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Wenn bash nun als interaktive Anmeldeshell gestartet wird, werden die folgenden Dateien gelesen:
~/.bash_profile
~/.profile
~/.bashrc
und wenn bash als interaktive Nicht-Login-Shell gestartet wird:
~/.bashrc
Sie sollten Sachen einfügen, die bash-spezifisch sind, ~/.bashrcund Sachen, die nicht bash-spezifisch sind ~/.profile. Zum Beispiel PATHgeht rein ~/.profileund HISTCONTROLgeht rein ~/.bashrc.
Beachten Sie, dass dies ~/.profilenicht bashspezifisch ist. Andere textbasierte Shells (zum Beispiel sh oder ksh) und grafische Shells (Gnome) können ebenfalls gelesen werden ~/.profile. Aus diesem Grund sollten Sie keine speziellen Bash-Inhalte hinzufügen ~/.profile.