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?
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?
Antworten:
Dies bedeutet, dass bashes 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--loginOption begonnen wurde.Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der
--loginOption 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_loginund~/.profilein dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist. Die--noprofileOption 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 -pfin Ihrer psAusgabe, die standardmäßig eine Login-Shell startet.
Versuchen Sie zu laufen login -pfund login -pflsehen Sie den Unterschied. man loginbeschreibt den Unterschied:
-lWeist 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).
echo $0: Wenn ich echo $0das von aufgerufene Terminal eingebe ctrl + alt + f1, ist das Ergebnis -bash; aber wenn ich es in termianl eingebe, das von aufgerufen wird ctrl + alt + t, ist das Ergebnis bash(kein führender Bindestrich). Können Sie erklären, warum?
--loginargument gestartet wird , ändert es seine nicht argv[0], fungiert aber als Login-Shell.
manzitiert