Jaka jest różnica między.bashrc,profil bash, oraz.środowisko?
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)?
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 .bashrc
jest 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.
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.
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.
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ść.
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.
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".
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.
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