Tak, takie jest oczekiwane zachowanie.
Krótko mówiąc, zachowanie jest następujące:
- bash zaczął jako interaktywna powłoka logowania: czyta
~/.profile
- bash zaczął jako interaktywna powłoka niezalogowana: czyta
~/.bashrc
Aby uzyskać więcej informacji, przeczytaj instrukcję bash dotyczącą plików startowych .
Osobiście uważam, że takie zachowanie jest dziwne i nie znalazłem jeszcze uzasadnienia dla tej decyzji projektowej.
Niektóre wyjaśnienia terminologii:
- Interaktywna powłoka jest powłoką, z którymi można wchodzić w interakcje, co oznacza, że można wpisywać komendy w nim. Większość używanych powłok to powłoki interaktywne.
- Nieinteraktywny powłoka jest powłoką, z którą nie może wchodzić w interakcje. Skrypty powłoki działają w nieinteraktywnych powłokach.
- Logowanie powłoki jest powłoka, która jest uruchamiana podczas logowania do systemu.
- Non-login powłoka jest powłoką, która rozpoczyna się po zakończeniu procesu logowania.
Większość powłok, które widzisz, to interaktywne powłoki niezalogowane . Jest to szczególnie prawdziwe, jeśli używasz środowiska graficznego takiego jak gnome, ponieważ wtedy gnome jest „powłoką logowania”. Każda sesja bash rozpoczęta w gnome jest powłoką niezalogowaną. Jeśli chcesz zobaczyć prawdziwą interaktywną powłokę logowania, przejdź do wirtualnej konsoli (za pomocą Ctrl+Alt+F1), a następnie zaloguj się, używając swojej nazwy użytkownika i hasła. To jest prawdziwa interaktywna powłoka bash. Możesz wrócić do powłoki graficznej za pomocą Ctrl+Alt+F7.
Istnieje opcja, --loginktóra sprawi, że bash będzie zachowywał się tak, jakby był powłoką logowania, nawet jeśli został uruchomiony po zalogowaniu. Skonfigurowanie terminala gnome do uruchamiania basha jako powłoki logowania oznacza, że zacznie bash przy użyciu tej --loginopcji.
Zwykle chcesz, aby bash zawsze czytał ~/.bashrcw interaktywnej powłoce. Oto jak polecam to zrobić:
Utwórz ~/.bash_profileplik. Jeśli bash jest uruchamiany jako powłoka logowania, najpierw go szuka, ~/.bash_profilezanim zacznie szukać ~/.profile. Jeśli bash znajdzie, ~/.bash_profileto nie będzie czytać ~/.profile.
Umieść następujące wiersze ~/.bash_profile:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Teraz, jeśli bash zostanie uruchomiony jako interaktywna powłoka logowania, odczyta następujące pliki:
~/.bash_profile
~/.profile
~/.bashrc
a jeśli bash zostanie uruchomiony jako interaktywna powłoka niezalogowana:
~/.bashrc
Powinieneś umieścić rzeczy, które są specyficzne dla basha ~/.bashrci rzeczy, które nie są specyficzne dla basha ~/.profile. Na przykład PATHwchodzi ~/.profilei HISTCONTROLwchodzi ~/.bashrc.
Zauważ, że ~/.profilenie jest to specyficzne dla bash. Odczytywane są również inne powłoki tekstowe (na przykład sh lub ksh) i powłoki graficzne (gnome) ~/.profile. Dlatego nie powinieneś umieszczać specyficznych rzeczy do bash ~/.profile.