Jeśli sprawdzę moją powłokę bash w terminalu OS X (10.6.4), na przykład wpisując echo $0
, przed moją skorupą znajduje się myślnik: -bash
. Co to oznacza?
To znaczy, że bash
jest wywoływany jako powłoka logowania.
man bash
mówi:
Powłoka logowania to taka, której pierwszym znakiem argumentu zero jest a
-
lub jeden rozpoczął się od--login
opcja.Gdy bash jest wywoływany jako interaktywna powłoka logowania lub jako nieinteraktywna powłoka z
--login
opcja, najpierw odczytuje i wykonuje polecenia z pliku/etc/profile
, jeśli ten plik istnieje. Po przeczytaniu tego pliku szuka~/.bash_profile
,~/.bash_login
, i~/.profile
, w tej kolejności, czyta i wykonuje polecenia z pierwszego, który istnieje i jest czytelny. The--noprofile
opcja może być użyta, gdy powłoka jest uruchamiana, aby zahamować to zachowanie.Po zamknięciu powłoki logowania bash odczytuje i wykonuje polecenia z pliku
~/.bash_logout
, jeśli istnieje.
Znajdziesz login -pf
w Twoim ps
wyjście, które domyślnie uruchamia powłokę logowania.
Spróbuj uruchomić login -pf
i login -pfl
i zobacz różnicę. man login
opisuje różnicę:
-l
Informuje program wykonywany przez logowanie, że nie jest to sesja logowania (zgodnie z konwencją, sesja logowania jest sygnalizowana programowi łącznikiem jako pierwszy znakargv[0]
; ta opcja wyłącza to) i zapobiega temuchdir(2)
do katalogu domowego użytkownika. Domyślnie dodaje się myślnik (jest to sesja logowania).
man
cytujeecho $0
: jeśli piszęecho $0
w terminalu wywoływanym przezctrl + alt + f1
, wynik to-bash
; ale jeśli wpiszę to w terminalu wywołanym przezctrl + alt + t
, wynik jestbash
(brak linii prowadzącej). Czy mógłbyś wyjaśnić dlaczego?--login
argument, to nie zmienia jegoargv[0]
, ale działa jako powłoka logowania.