Bash nie ładuje „.profile” w nowej sesji na Linuksie

22

Konfiguruję nowy komputer z systemem Linux, który dostałem z naszego działu IT, i zauważyłem, że .profilenie jest ładowany, gdy rozpoczynam nową sesję terminalową. Obecna powłoka to Bash , chociaż zmieniłem ją z domyślnej sh, z której była dostarczona. Jak ustawić ładowanie .profileprzy starcie?

Mam dostęp do powłoki przez SSH : ssh myusername@remotemachine. Mam uprawnienia administratora.

sa125
źródło
Pokaż nam swoje polecenie, którego używasz do uruchomienia powłoki.
Nifle,

Odpowiedzi:

24

Gdy Bash zaczyna się jako interaktywna powłoka logowania, jednym z plików, które może przetwarzać, jest ~/.profile.

Kiedy zaczyna się jako interaktywna powłoka niezalogowana, tak się nie dzieje. Przetwarza /etc/bash.bashrc(jeśli ten plik lub podobny plik jest włączony w twojej wersji Bash) i ~/.bashrc.

Możesz dodać następujące ~/.bashrc(ale uważaj, aby nieumyślnie zmienić pętle lub wartości):

. $HOME/.profile
Wstrzymano do odwołania.
źródło
8
Jeśli masz mieć swoje .bashrc źródło .profile (którego nie polecam), powinieneś mieć się na baczności przed podwójnym pozyskiwaniem. Ustaw jakąś zmienną wartownika lub mniej więcej [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka
2
Tak, też tak naprawdę nie polecam.
Wstrzymano do odwołania.
12
Powłoka logowania spróbuje ~ / .bash_profile, ~ / .bash_login i ~ / .profile w kolejności i otworzy tylko pierwszą znalezioną.
Beano
3
Jak powiedzieli inni, NIE jest to zalecane, ponieważ zwykłym sposobem jest profil i „znajomi” (.bash_profile) na źródło .bashrc, a nie w drugą stronę. Możliwe, że twój program terminalowy NIE jest powłoką logowania, ale interaktywną powłoką bez logowania. Często możesz ustawić preferencje - ustaw je jako powłokę logowania, aby uzyskać .profile, .login i / lub .bash_profile do wykonania.
rholmes,
15

To zależy od tego, jak uruchomisz swoją powłokę. Jak powiedzieli inni, powłoka logowania załaduje twój profil (najpierw szuka .bash_profile, a następnie spróbuje .profile). Jeśli znajdzie jeden z nich, ładuje je. Powłoka niezalogowana (interaktywna lub nieinteraktywna) będzie źródłem .bashrc.

Sugeruję umieszczenie wszystkiego w .bashrc. Podział .profile / .bashrc był swego rodzaju arbitralny i miał więcej sensu w dawnych czasach UNIX-a, gdy tty nie było tylko nazwą urządzenia i oznaczało rzeczywisty TeleType. Miał on uruchamiać pewne rzeczy (np. Sprawdzanie poczty) przy „głównym” logowaniu do serwera, a po prostu normalną konfigurację innych powłok. W większości Linuksów zalogujesz się teraz, tak naprawdę nie logujesz się do powłoki, ponieważ logujesz się do jakiegoś interfejsu graficznego (KDE, gnome, CDE „dreszcz”). Menedżer sesji zajmuje się teraz „procesami logowania spawn”. Teraz jest to mniej istotne.

Moja sugestia: spraw, aby Twój .profile składał się wyłącznie z:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

jako pierwszy wiersz .bashrc, strzeż się dziwnych rzeczy podczas uruchamiania skryptu bash, wyskakując wcześnie:

[[ $- != *i* ]] && return
Rich Homolka
źródło
5
.profilepowinien być utrzymany agresywny bash. Sugeruję skonfigurować .bash_profileładowanie, .profilea następnie ładowanie .bashrc. wkładaj tylko agresywne rzeczy typu bash .profile, like PATHi LC_*takie tam. Wrzuć resztę .bashrc.
lesmana
@Rich Homolka Dlaczego [-f $ HOME / .bashrc] jest dwa razy w twoim poleceniu? Czym różni się wysłane polecenie od po prostu „. $ HOME / .bashrc '?
David Doria
1
Protip: Nie umieszczaj w swoim .bashrc niczego, co pisze na stdout lub stderr, ponieważ może to uszkodzić nieinteraktywnych klientów dla takich rzeczy jak SCP. Rzeczy z wyjściem (na przykład lubię witać się ciasteczkiem z wróżbą i czasem przestoju) powinny iść tylko w .profile / .bash_profile
Brian A. Henning
@Lotharyx true. Mieliśmy standardowy kshrc, który wyeksportował na standardowe wyjście, wybuchł Xserver (kolibry przekraczają)
Rich Homolka