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?
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?
Odpowiedzi:
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).
echo $0
: jeśli piszę echo $0
w terminalu wywoływanym przez ctrl + alt + f1
, wynik to -bash
; ale jeśli wpiszę to w terminalu wywołanym przez ctrl + alt + t
, wynik jest bash
(brak linii prowadzącej). Czy mógłbyś wyjaśnić dlaczego?
--login
argument, to nie zmienia jego argv[0]
, ale działa jako powłoka logowania.
man
cytuje