Eine Shell wird gestartet, wenn Sie sich anmelden, sie wird jedoch auch von Programmen wie make
oder beim Ausführen eines Shell-Skripts oder beim Eingeben :sh
von vi
oder beim Erstellen eines neuen Terminalfensters gestartet.
Ursprünglich wurde die Shell ~/.profile
beim Anmelden oder Ausführen eingelesen su
. Mit diesem Skript können Sie beispielsweise ankündigen, ob Sie eine neue E-Mail erhalten haben, Ihre Lösch- und Kill-Zeichen anpassen sowie die Variablen TERM und PATH festlegen und exportieren. Beim Starten in fast jedem anderen Kontext wurde die Shell nicht gelesen ~/.profile
, da die meisten dieser Vorgänge überflüssig wären. Es wurde erwartet, dass Sie alle wichtigen Shell-Variablen in die neue Shell exportiert haben.
Die Art und Weise, wie die Shell wusste, ob sie einlesen sollte, ~/.profile
bestand darin, zu überprüfen, ob das erste Zeichen von argv[0]
aka $0
war '-'
.
Zunächst csh
wurden Aliase eingeführt. Aliase wurden nicht in die Umwelt exportiert. csh
wurde entwickelt, um zwei verschiedene Initialisierungsskripte einzulesen. ~/.login
wurde nur gelesen, wenn ein Benutzer angemeldet war, und der Anhaltspunkt dafür war, wenn argv[0]
mit begonnen wurde '-'
. ~/.cshrc
wurde jedes Mal gelesen, wenn die Shell gestartet wurde. Im Allgemeinen legte man Aliase in ~/.cshrc
und alles andere in ~/.login
. csh
auch unterstützt ~/.logout
, die in den meisten Fällen nur den Bildschirm gelöscht und ausgeführt fortune
.
Andere Shells übernahmen die gleichen Funktionen. ksh
würde einlesen ~/.kshrc
, bash
würde einlesen ~/.bashrc
, und dort würden Sie Ihre Aliasdefinitionen platzieren.
Um es kurz zu machen, die Anwendung, die eine Shell erzeugt, muss entscheiden, ob es sich um eine "Login-Shell" handelt, in welchem Fall es diese '-'
am Anfang gibt, oder um eine reguläre Shell. In den meisten Fällen wird eine Shell, die interaktiv sein soll, als Anmeldeshell gestartet, und eine Shell dient nur zum Ausführen einiger Befehle, entweder als Argumente oder aus einem Skript, und beim Beenden handelt es sich um eine reguläre Shell.
Aber es hängt alles von der Laune der Anwendung ab, die die Shell startet.