Jakie są różnice funkcjonalne między .profile .bash_profile i .bashrc

181

Jakie są różnice funkcjonalne między .profile, .bash_profilei .bashrcpliki?

Lollercoaster
źródło

Odpowiedzi:

151

.bash_profilei .bashrcsą specyficzne dla bash, podczas gdy .profilesą odczytywane przez wiele powłok przy braku własnych plików konfiguracyjnych specyficznych dla powłoki. ( .profilebył używany przez oryginalną powłokę Bourne'a) .bash_profilelub .profilejest czytany przez powłoki logowania wraz z .bashrc; podpowłoki tylko do odczytu .bashrc. (Między kontrolą zadań a nowoczesnymi systemami okienkowania .bashrcsamo w sobie się nie przyzwyczaja. Jeśli używasz screenlub tmux, ekrany / okna zwykle uruchamiają podpowłoki zamiast powłok logowania).

Pomysł polegał na tym, że jednorazowa konfiguracja została wykonana przez .profile(lub jego wersję specyficzną dla powłoki), a elementy na powłoki .bashrc. Na przykład, na ogół chcesz ładować zmienne środowiskowe tylko raz na sesję, zamiast ich uderzać za każdym razem, gdy uruchamiasz podpowłokę w trakcie sesji, podczas gdy zawsze chcesz mieć swoje aliasy (które nie są propagowane automatycznie, podobnie jak zmienne środowiskowe).

Inne znaczące pliki konfiguracyjne powłoki:

/etc/bash_profile(awaryjne /etc/profile) jest odczytywane przed użytkownikiem .profiledla konfiguracji ogólnosystemowej, a także /etc/bashrcw podpowłokach (w tym przypadku nie ma rezerwowych). Wiele systemów, w tym Ubuntu, również korzysta z /etc/profile.dkatalogu zawierającego skryptlety powłoki, które są .( source) od /etc/profile; fragmenty tutaj są na powłokę, z *.shzastosowaniem do wszystkich powłok zgodnych z Bourne / POSIX i innymi rozszerzeniami mającymi zastosowanie do tej konkretnej powłoki.

geekozaur
źródło
58

.profil

.profiledotyczy rzeczy, które nie są ściśle powiązane Bash, takich jak zmienne środowiskowe PATHi przyjaciele, i powinny być dostępne w każdej chwili.

Na przykład .profilepowinien zostać załadowany również podczas uruchamiania graficznej sesji pulpitu.


.bashrc

.bashrcsłuży do konfigurowania interaktywnego użycia Bash, np. Bash aliasesustawienia ulubionych editor, ustawień Bash promptitp.


.bash_profile

.bash_profile służy do upewnienia się, że zarówno rzeczy w, jak .profilei dla .bashrcsą załadowane login shells.

Na przykład .bash_profilemoże być coś prostego

. ~/.profile
. ~/.bashrc

Jeśli miałbyś pominąć .bashrc, tylko .profileładowane byłyby.

MangeshBiradar
źródło
1
To odpowiedziało na moje pytanie dotyczące Mac OS X
Jake Toronto,
38

Według strony podręcznika bash .bash_profilewykonywana jest dla powłok logowania, natomiast .bashrcdla interaktywnych powłok bez logowania.

Czym jest powłoka do logowania lub bez logowania?

Podczas logowania (wpisz nazwę użytkownika i hasło) przez konsolę, albo siedząc przy komputerze, albo zdalnie przez ssh: .bash_profilewykonywane jest skonfigurowanie powłoki przed pierwszym wierszem poleceń. Ale jeśli zalogowałeś się już na swoim komputerze i otworzyłeś nowe okno terminala (xterm) w Gnome lub KDE, to .bashrcjest ono wykonywane przed wierszem poleceń okna. .bashrcjest również uruchamiany po uruchomieniu nowej instancji bash przez wpisanie /bin/bashterminala.

Wyjątkiem od wytycznych dotyczących okna terminala jest aplikacja Terminal.app w systemie Mac OS X, która domyślnie uruchamia powłokę logowania dla każdego nowego okna terminala, wywołując .bash_profilezamiast .bashrc. Inne emulatory terminala GUI mogą robić to samo, ale większość tego nie robi.

Więcej tutaj .

Paulecci
źródło