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 --login
der 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 --login
Option gestartet .
Normalerweise soll die Bash immer ~/.bashrc
in einer interaktiven Shell gelesen werden . Hier ist, wie ich das empfehle:
Erstellen Sie eine ~/.bash_profile
Datei. Wenn bash als Login-Shell gestartet wird, ~/.bash_profile
sucht 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, ~/.bashrc
und Sachen, die nicht bash-spezifisch sind ~/.profile
. Zum Beispiel PATH
geht rein ~/.profile
und HISTCONTROL
geht rein ~/.bashrc
.
Beachten Sie, dass dies ~/.profile
nicht 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
.