Die BASH-Shell versucht während der Initialisierung mehrere Konfigurationsdateien zu laden. Es gibt 2 Sätze von Konfigurationsdateien, je nachdem, ob es sich um eine Login-Shell oder eine Nicht-Login-Shell handelt.
- Wenn Sie sich bei einem Server auf einem Bare-Metal-Monitor oder über SSH oder mit # su – [Benutzername] anmelden, erhalten Sie eine Anmelde-Shell.
- Wenn Sie eine Shell in einem Terminal in einer bestehenden Sitzung starten (Gnome-Terminal, eine Shell in einer anderen oder mit # su [Benutzername]…), erhalten Sie eine Nicht-Login-Shell. Ein Shell-Skript wird auch unter einer Nicht-Login-Shell ausgeführt.
Unten veranschaulichen wir den Unterschied, indem wir diesen Konfigurationsdateien etwas Debugging hinzufügen.
Login-Shell
Standardmäßig lädt eine Login-Shell die folgenden Dateien:
# su - test this is /etc/profile this is ~/.bash_profile this is ~/.bashrc this is /etc/bashrc
Beachten Sie hier das ~/.bash_profile Datei, die Datei heißt standardmäßig ~/.bashrc , und ~/.bashrc rufen /etc/bashrc auf .
Wenn BASH aus irgendeinem Grund die Datei ~/.bash_profile nicht findet, sucht es nach ~/.bash_login stattdessen. Wenn ~/.bash_login wieder nicht gefunden werden kann, sucht BASH nach ~/.profile stattdessen.
Und in den beiden Fällen werden ~/.bashrc und /etc/bashrc nicht geladen, es sei denn, sie wurden explizit in ~/.bash_login oder ~/.profile aufgerufen.
Die Beispiele, wenn ~/.bash_profile nicht existiert:
– Bei Anwesenheit von ~/.bash_login, egal ob ~/.profile existiert oder nicht:
$ su - test Password: this is /etc/profile This is ~/.bash_login
– Nur ~/.profile:
# su - test this is /etc/profile this is ~/.profile
Shell ohne Anmeldung
Es ist einfacher, BASH lädt nur die ~/.bashrc und wieder die Datei mit dem Aufruf /etc/bashrc.
# su test this is ~/.bashrc this is /etc/bashrc