Jaka jest różnica między.bashrc,profil bash, oraz.środowisko?

zamknięte . To pytanie i jego odpowiedzi są zamknięte , Ponieważ pytanie jest off-topic, ale ma znaczenie historyczne. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.

Użyłem wielu różnych * systemy oparte na Nix lat, i wydaje się, że każdy smak Bash używam ma inny algorytm do decydowania, które skrypty startowe do uruchomienia. Do zadań takich jak konfigurowanie zmiennych środowiskowych i aliasów oraz drukowanie komunikatów startowych (np. motd), który skrypt startowy jest do tego właściwym miejscem?

Jaka jest różnica między umieszczaniem rzeczy w .bashrc, .bash_profile, i .environment? Widziałem też inne pliki takie jak .login, .bash_login, i .profile; czy są one kiedykolwiek istotne? Jakie są różnice, jakie są uruchamiane podczas logowania fizycznego, logowania zdalnego przez ssh i otwierania nowego okna terminala? Czy istnieją jakieś znaczące różnice między platformami (w tym Mac OS X (i jego Terminal.app) i Cygwin Bash)?

Author: Adam Rosenfield, 2009-01-06

7 answers

Główną różnicą w przypadku plików konfiguracyjnych powłoki jest to, że niektóre są odczytywane tylko przez powłoki "login" (np. gdy logujesz się z innego hosta lub logujesz się na konsoli tekstowej lokalnej maszyny unix). są to te, które nazywają się, powiedzmy, .login lub .profile lub .zlogin (w zależności od tego, której powłoki używasz).

Następnie masz pliki konfiguracyjne, które są odczytywane przez" interaktywne " powłoki (jak te podłączone do terminala (lub pseudo-terminal w przypadku, powiedzmy, emulatora terminala działającego pod systemem okienkowym). są to te o takich nazwach jak .bashrc, .tcshrc, .zshrc, itd.

bash komplikuje to w tym, że .bashrcjest odczytywane tylko przez powłokę, która jest zarówno interaktywna , jak i nie-logowania, więc większość ludzi w końcu mówi swoim .bash_profile, aby również czytali {[3] } z czymś w rodzaju

[[ -r ~/.bashrc ]] && . ~/.bashrc

Inne muszle zachowują się inaczej - np. z zsh, .zshrc jest zawsze czytany dla interaktywnej powłoki, niezależnie od tego, czy jest to login, czy nie.

Strona podręcznika dla bash wyjaśnia okoliczności, w których każdy plik jest odczytywany. Tak, zachowanie jest ogólnie spójne między maszynami.

.profile jest to po prostu nazwa pliku skryptu logowania pierwotnie używana przez /bin/sh. bash, będąc ogólnie wstecznie kompatybilnym z /bin/sh, będzie czytać .profile, jeśli istnieje.

 73
Author: Cos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 05:16:54

To proste. Jest wyjaśnione w man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Powłoki logowania to te, które są odczytywane przez zalogowanego użytkownika (tak więc, nie są wykonywane tylko podczas uruchamiania xterm, na przykład). Są inne sposoby logowania. Na przykład za pomocą Menedżera wyświetlania X. Mają one inne sposoby odczytywania i eksportowania zmiennych środowiskowych podczas logowania.

Przeczytaj również rozdział INVOCATION w podręczniku. Mówi " następujące akapity opisują, w jaki sposób bash wykonuje swoje pliki startowe.", i myślę, że to jest spot-on :) to wyjaśnia, co" interaktywna " powłoka jest zbyt.

Bash nie wie o .environment. Podejrzewam, że jest to plik twojej dystrybucji, aby ustawić zmienne środowiskowe niezależne od powłoki, którą używasz.

 48
Author: Johannes Schaub - litb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 15:29:38

Klasycznie, {[0] } jest używana przez powłokę Bourne ' a i prawdopodobnie jest wspierana przez Basha jako miara dziedziczna. Ponownie, ~/.login i ~/.cshrc były używane przez C Shell - nie jestem pewien, czy Bash w ogóle ich używa.

~/.bash_profile zostanie użyty raz, przy logowaniu. Skrypt ~/.bashrc jest odczytywany przy każdym uruchomieniu powłoki. Jest to analogiczne do /.cshrc dla powłoki C.

Jedną z konsekwencji jest to, że rzeczy w ~/.bashrc powinny być tak lekkie (Minimalne), jak to możliwe, aby zmniejszyć koszty ogólne podczas uruchamiania nie-logowania shell.

Uważam, że plik ~/.environment jest plikiem kompatybilności dla powłoki Korn.

 9
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 06:03:43

Znalazłem informacje o .bashrc i .bash_profile tutaj podsumowując:

.bash_profile jest wykonywany, gdy login. Rzeczy, które tam umieścisz, mogą być twoja ścieżka i inne ważne zmienne środowiskowe.

.bashrc jest używany dla powłok bez logowania. Nie wiem, co to znaczy. Wiem. ten RedHat wykonuje go za każdym razem, gdy zaczynasz innej powłoki (su dla tego użytkownika lub po prostu ponownie wywołując Basha) możesz chcesz tam wstawić aliasy ale znowu Nie wiem, co to znaczy. I sam to zignoruj.

.profil jest odpowiednikiem .bash_profile dla roota. Myślę, że nazwa została zmieniona na let other używają go również powłoki (csh, sh, tcsh). (nie potrzebujesz go jako użytkownika)

Jest też .bash_logout wich / align = "left" / ..Wyloguj się. Może chcesz zatrzymać deamons lub nawet zrób małe sprzątanie . Możesz Dodaj również "Wyczyść" tam, jeśli chcesz wyczyść ekran podczas logowania Wynocha.

Również jest pełna kontynuacja każdego z plików konfiguracji tutaj

To pewnie nawet distro.- zależne, nie wszystkie dystrybucje decydują się na każdy konfigurator z nimi, a niektóre mają nawet więcej. Ale gdy mają tę samą nazwę, zazwyczaj zawierają tę samą treść.

 7
Author: Filip Ekberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 14:26:25

Według Josha Staigera , terminala Mac OS X.aplikacja domyślnie uruchamia powłokę logowania zamiast powłoki bez logowania dla każdego nowego okna terminala, wywołując .bash_profile zamiast .bashrc.

Poleca:

Przez większość czasu nie chcesz utrzymywać dwóch oddzielnych plików konfiguracyjnych dla powłoki login i non-login - gdy ustawisz ścieżkę, chcesz, aby Zastosuj do obu. Możesz to naprawić, pozyskując .bashrc z twojego .plik bash_profile, a następnie umieszczenie ścieżki i wspólne ustawienia w .bashrc.

Aby to zrobić, dodaj następujące linie do .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

Teraz po zalogowaniu się do swojego maszyna z konsoli .bashrc zostanie wezwany.

 4
Author: Rose Perrone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 00:22:05

Dobrym miejscem do obejrzenia jest strona podręcznika bash. Tutaj jest wersja online. Poszukaj sekcji "inwokacja".

 2
Author: PolyThinker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-06 04:06:21

Użyłem dystrybucji z rodziny Debian, które wydają się uruchamiać .profile, ale nie .bash_profile, natomiast pochodne RHEL wykonują .bash_profile przed .profile.

Wydaje się, że jest bałagan, gdy trzeba skonfigurować zmienne środowiskowe do pracy w dowolnym systemie operacyjnym Linux.

 0
Author: seismick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-20 03:45:00