Bash nie ładuje „.profile” w nowej sesji w systemie Linux

Aug 16 2010

Konfiguruję nową maszynę z Linuksem, którą dostałem z naszego działu IT i zauważyłem, że .profilenie jest ładowana, kiedy rozpoczynam nową sesję terminala. Obecna powłoka to Bash , chociaż zmieniłem ją z domyślnego sh, z którym przyszedł. Jak sprawić, by ładował się .profileprzy starcie?

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

Odpowiedzi

24 Pauseduntilfurthernotice. Aug 16 2010 at 14:38

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

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

Możesz dodać do swojego ~/.bashrc(ale uważaj na pętle lub wartości nieumyślnie zmienione):

. $HOME/.profile
16 RichHomolka Aug 16 2010 at 17:28

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

Proponuję umieścić wszystko w .bashrc. Podział .profile / .bashrc był w pewnym sensie arbitralny i miał większy sens w dawnych czasach Uniksa, kiedy tty nie było tylko nazwą urządzenia i oznaczało rzeczywisty TeleType. Miał on na celu rozpoczęcie pewnych rzeczy (takich jak sprawdzanie poczty) od „głównego” logowania do serwera i zwykłych czynności konfiguracyjnych dla 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 'dreszczyk'). „Procesy logowania odradzania” są teraz obsługiwane przez menedżera sesji. Teraz jest o wiele mniej istotne.

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

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

jako pierwsza linia pliku .bashrc, chroń się przed dziwnymi rzeczami, które dzieją się podczas uruchamiania skryptu bash, wyskakując wcześnie:

[[ $- != *i* ]] && return