Zasadniczo, czy powłoka jest zalogowana czy nie, interaktywna czy nie ma znaczenia z dokładnie jednego powodu:
Pliki inicjujące i ustawione opcje domyślne zależą od tego, czy powłoka jest zalogowana, czy nie, i interaktywna.
Odpowiednio to, czy powłoka jest loginem czy nie, czy interaktywna, czy nie, zależy wyłącznie od wywołania użytego - dokładnej nazwy polecenia i opcji.
Te dwie właściwości są prostopadłe - niezależnie od tego, czy powłoka jest loginem, czy nie, nie ma wpływu na to, czy jest interaktywna, czy nie.
Bash uruchamia powłokę logowania, jeśli którykolwiek z nich jest prawdziwy:
argv[0]
, nazwa polecenia, które zostało wywołane jako, zaczyna się od -
-l
opcja jest określona
Podobnie, bash uruchamia interaktywną powłokę, jeśli którykolwiek z nich jest prawdziwy:
- nie określono pliku do wykonania (tj. polecenie nie było
bash some/file
) lub ciągu polecenia do uruchomienia (bash -c 'foo'
) (rzeczywisty warunek jest nieco bardziej złożony, patrz instrukcja)
-i
opcja została podana
W szczególności (i paradoksalnie) to drugie implikuje to bash -ic 'foo'
uruchomienie interaktywnej powłoki.
Tak więc poniższe polecenie uruchamia interaktywną powłokę logowania, mimo że nie ma w tym nic interaktywnego, a wywołanie nie miało nic wspólnego z logowaniem:
bash -lic true
To, że logowanie za pomocą konsoli lub GUI uruchamia powłokę logowania (a może nie) jest całkowicie efektem procesu logowania przy użyciu odpowiedniego wywołania.
Warunki i efekty są szczegółowo opisane w podręczniku bash, sekcja Pliki startowe .
Głównym źródłem nieporozumień jest to, że istnieje inne wspólne znaczenie dla powłoki „login”:
Powłoka logowania użytkownika to powłoka zdefiniowana we passwd
wpisie tego użytkownika (która może pochodzić z /etc/passwd
LDAP lub innego źródła).
login
Programu SSH itp rozpocząć tę skorupę jako logowania powłoki w sensie oznaczało w pozostałej części odpowiedzi - z wiodącym -
w nazwie polecenia zwykle. Jeśli chcesz być szczególnie zagubiony, możesz powiedzieć:
Niektóre procesy logowania uruchamiają powłokę logowania użytkownika jako powłokę logowania.
Zauważ, że logowanie GUI uruchamia powłokę logowania wyłącznie dlatego, że programiści uznali to za wygodne - LightDM uruchamia skrypt przy logowaniu, który oczywiście nie jest interaktywny i na pewno nie zależy od powłoki logowania użytkownika (w drugim tego słowa znaczeniu). Nie należy jednak polegać na tym, że menedżer wyświetlania uruchamia powłokę logowania - nie wszystkie - i w przypadku Wayland i GNOME proces logowania w ogóle nie używa skryptów powłoki.
non-interactive login shell
jest błędny.