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--loginopcja.Gdy bash jest wywoływany jako interaktywna powłoka logowania lub jako nieinteraktywna powłoka z
--loginopcja, 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--noprofileopcja 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ę:
-lInformuje 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.
mancytuje