Wenn ich meine Bash-Shell in einem OS X (10.6.4) -Terminal untersuche, z. B. durch Eingabe echo $0
, befindet sich vor meiner Shell ein Bindestrich wie folgt : -bash
. Was bedeutet dieser Strich?
Dies bedeutet, dass bash
es als Login-Shell aufgerufen wird.
man bash
sagt:
Eine Anmeldeshell ist eine Shell, deren erstes Zeichen des Arguments Null a ist
-
, oder eine, die mit der--login
Option begonnen wurde.Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der
--login
Option aufgerufen wird , werden zuerst Befehle aus der Datei gelesen und ausgeführt/etc/profile
, sofern diese Datei vorhanden ist. Nachdem die Datei zu lesen, sucht er nach~/.bash_profile
,~/.bash_login
und~/.profile
in dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist. Die--noprofile
Option kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.Wenn eine Anmeldeshell beendet wird, liest bash Befehle aus der Datei und führt sie aus
~/.bash_logout
, falls vorhanden.
Sie finden login -pf
in Ihrer ps
Ausgabe, die standardmäßig eine Login-Shell startet.
Versuchen Sie zu laufen login -pf
und login -pfl
sehen Sie den Unterschied. man login
beschreibt den Unterschied:
-l
Weist das durch die Anmeldung ausgeführte Programm an, dass dies keine Anmeldesitzung ist (gemäß Konvention wird dem Programm eine Anmeldesitzung mit einem Bindestrich als erstem Zeichen von signalisiertargv[0]
; diese Option deaktiviert dies) und verhindert, dass es in daschdir(2)
Ausgangsverzeichnis des Benutzers gelangt . Standardmäßig wird der Bindestrich hinzugefügt (dies ist eine Anmeldesitzung).
man
zitiertecho $0
: Wenn ichecho $0
das von aufgerufene Terminal eingebectrl + alt + f1
, ist das Ergebnis-bash
; aber wenn ich es in termianl eingebe, das von aufgerufen wirdctrl + alt + t
, ist das Ergebnisbash
(kein führender Bindestrich). Können Sie erklären, warum?--login
argument gestartet wird , ändert es seine nichtargv[0]
, fungiert aber als Login-Shell.