Im Wesentlichen spielt es aus genau einem Grund eine Rolle, ob eine Shell angemeldet ist oder nicht, ob sie interaktiv ist oder nicht:
Die Initialisierungsdateien und Standardoptionen hängen davon ab, ob eine Shell angemeldet ist oder nicht und ob sie interaktiv ist oder nicht.
Ob eine Shell angemeldet ist oder nicht oder interaktiv ist, hängt dementsprechend ausschließlich vom verwendeten Aufruf ab - dem genauen Befehlsnamen und den Optionen.
Die beiden Eigenschaften sind ansonsten orthogonal - ob eine Shell angemeldet ist oder nicht, hat keinen Einfluss darauf, ob sie interaktiv ist oder nicht.
Bash startet eine Login-Shell, wenn eine der folgenden Bedingungen erfüllt ist:
argv[0]
Der Name des Befehls, unter dem er aufgerufen wurde, beginnt mit einem -
- Die
-l
Option ist angegeben
In ähnlicher Weise startet bash eine interaktive Shell, wenn eine der folgenden Bedingungen erfüllt ist:
- Es wurde keine auszuführende Datei angegeben (dh der Befehl war nicht vorhanden
bash some/file
) oder eine auszuführende Befehlszeichenfolge ( bash -c 'foo'
) (der tatsächliche Zustand ist etwas komplexer, siehe Handbuch).
- Die
-i
Option wurde angegeben
Insbesondere (und paradoxerweise) impliziert Letzteres, dass bash -ic 'foo'
eine interaktive Shell gestartet wird.
Das Folgende startet also eine interaktive Login-Shell, obwohl sie überhaupt nichts Interaktives enthält und der Aufruf nichts mit dem Einloggen zu tun hatte:
bash -lic true
Das Anmelden über die Konsole oder die grafische Benutzeroberfläche startet eine Anmeldeshell (oder auch nicht), ist ausschließlich eine Auswirkung des Anmeldevorgangs unter Verwendung des entsprechenden Aufrufs.
Die Bedingungen und Auswirkungen werden ausführlich im Bash-Handbuch im Abschnitt Startdateien beschrieben .
Eine Hauptverwirrungsquelle ist, dass es eine andere gemeinsame Bedeutung für die "Login" -Shell gibt:
Die Anmelde-Shell eines Benutzers ist die Shell, die in diesem Benutzereintrag definiert ist passwd
(die von /etc/passwd
LDAP oder einer anderen Quelle stammen kann).
Das login
Programm, SSH usw. starten diese Shell als Login- Shell im Sinne der restlichen Antwort - -
in der Regel mit einem vorangestellten Kommandonamen. Wenn Sie besonders verwirrend sein wollten, könnten Sie sagen:
Einige Anmeldevorgänge starten die Anmeldeshell des Benutzers als Anmeldeshell.
Beachten Sie, dass die GUI-Anmeldung eine Anmeldeshell nur startet, weil die Entwickler dies für zweckmäßig hielten. LightDM führt beim Anmelden ein Skript aus, das offensichtlich nicht interaktiv ist und sicherlich nicht von der Anmeldeshell des Benutzers abhängt (im zweiten Sinne). Verlassen Sie sich jedoch nicht darauf, dass der Anzeigemanager eine Anmeldeshell startet - dies tun nicht alle. In Wayland und GNOME werden beim Anmeldevorgang überhaupt keine Shell-Skripte verwendet.
non-interactive login shell
.