Was sind die funktionalen Unterschiede zwischen .profile .bash_profile und .bashrc?

181

Was sind die funktionalen Unterschiede zwischen .profile, .bash_profileund .bashrcDateien?

lollercoaster
quelle

Antworten:

151

.bash_profileund .bashrcsind spezifisch für bash, wohingegen .profilevon vielen Shells gelesen wird, wenn keine eigenen Shell-spezifischen Konfigurationsdateien vorhanden sind. ( .profileWurde von der ursprünglichen Bourne-Shell verwendet.) .bash_profileoder .profilewird von Login-Shells zusammen mit .bashrc; gelesen . Subshells schreibgeschützt .bashrc. (Zwischen Jobsteuerung und modernen Fenstersystemen wird .bashrcan sich nicht viel gewirkt . Wenn Sie screenoder verwenden tmux, werden auf Bildschirmen / Fenstern in der Regel Subshells anstelle von Anmeldeshells ausgeführt.)

Die Idee dahinter war, dass das einmalige Setup von .profile(oder einer Shell-spezifischen Version davon) und das Pro-Shell-Zeug von durchgeführt wurde .bashrc. Beispielsweise möchten Sie Umgebungsvariablen im Allgemeinen nur einmal pro Sitzung laden, anstatt sie beim Starten einer Subshell innerhalb einer Sitzung zu beschädigen. Sie möchten jedoch immer Ihre Aliase (die nicht wie Umgebungsvariablen automatisch weitergegeben werden).

Andere bemerkenswerte Shell-Konfigurationsdateien:

/etc/bash_profile(Fallback /etc/profile) wird vor dem Benutzer .profilezur systemweiten Konfiguration und ebenfalls /etc/bashrcin Subshells gelesen (kein Fallback für diesen). Viele Systeme, einschließlich Ubuntu, verwenden auch ein /etc/profile.dVerzeichnis mit Shell-Scriptlets, die von .( source) stammen /etc/profile. Die Fragmente sind hier pro Shell, wobei *.shsie auf alle Bourne / POSIX-kompatiblen Shells und andere Erweiterungen angewendet werden, die für diese bestimmte Shell gelten.

Geekosaurier
quelle
58

.Profil

.profileist für Dinge, die nicht spezifisch damit zusammenhängen Bash, wie Umgebungsvariablen PATHund Freunde, und die jederzeit verfügbar sein sollten.

Zum Beispiel .profilesollte auch beim Starten einer grafischen Desktopsitzung geladen werden.


.bashrc

.bashrcdient zum Konfigurieren der interaktiven Bash-Verwendung Bash aliases, zum Einstellen Ihres Favoriten editor, zum Einstellen des Bash promptusw.


.bash_profile

.bash_profile dient dazu, sicherzustellen, dass sowohl die Dinge in .profileals .bashrcauch für geladen sind login shells.

Könnte zum Beispiel .bash_profileso etwas Einfaches sein

. ~/.profile
. ~/.bashrc

Wenn Sie weglassen würden .bashrc, .profilewürde nur geladen werden.

MangeshBiradar
quelle
1
Dies beantwortete meine Frage für Mac OS X
Jake Toronto
38

Laut Bash-Manpage .bash_profilewird für Login-Shells ausgeführt, während .bashrcfür interaktive Nicht-Login-Shells ausgeführt wird.

Was ist eine Login- oder Nicht-Login-Shell?

Wenn Sie sich über die Konsole anmelden (Benutzername und Kennwort eingeben), entweder am Computer oder remote über ssh: .bash_profilewird ausgeführt, um Ihre Shell vor der ersten Eingabeaufforderung zu konfigurieren. Wenn Sie sich jedoch bereits bei Ihrem Computer angemeldet haben und ein neues Terminalfenster (xterm) in Gnome oder KDE öffnen, .bashrcwird dies vor der Eingabeaufforderung des Fensters ausgeführt. .bashrcwird auch ausgeführt, wenn Sie eine neue Bash-Instanz durch Eingeben /bin/basheines Terminals starten .

Eine Ausnahme von den Terminal - Fenstern Richtlinien ist Terminal.app Mac OS X, die standardmäßig für jedes neues Terminalfenster ein Login - Shell ausgeführt wird , rief .bash_profilestatt .bashrc. Andere GUI-Terminalemulatoren tun möglicherweise dasselbe, die meisten neigen jedoch dazu, dies nicht zu tun.

Mehr hier .

Paulecci
quelle