Lösung 1:
.bash_profile
und .bashrc
sind spezifisch für bash
, wohingegen .profile
wird von vielen Shells gelesen, wenn keine eigenen Shell-spezifischen Konfigurationsdateien vorhanden sind. (.profile
wurde von der ursprünglichen Bourne-Shell verwendet.) .bash_profile
oder .profile
wird zusammen mit .bashrc
von Login-Shells gelesen; Unterschalen nur lesbar .bashrc
. (Zwischen Jobsteuerung und modernen Fenstersystemen, .bashrc
an sich wird nicht viel verwendet. Wenn Sie screen
verwenden oder tmux
, Bildschirme/Fenster führen normalerweise Subshells anstelle von Login-Shells aus.)
Die Idee dahinter war, dass die einmalige Einrichtung von .profile
durchgeführt wurde (oder Shell-spezifische Version davon) und Shell-Zeug von .bashrc
. Beispielsweise möchten Sie Umgebungsvariablen im Allgemeinen nur einmal pro Sitzung laden, anstatt sie jedes Mal zu zerstören, wenn Sie eine Subshell innerhalb einer Sitzung starten, während Sie immer Ihre Aliase haben möchten (die nicht automatisch weitergegeben werden wie Umgebungsvariablen).
Andere bemerkenswerte Shell-Konfigurationsdateien:
/etc/bash_profile
(Rückfall /etc/profile
) wird vor dem .profile
des Benutzers gelesen für die systemweite Konfiguration und ebenso /etc/bashrc
in Subshells (kein Fallback für diese). Viele Systeme, einschließlich Ubuntu, verwenden auch einen /etc/profile.d
Verzeichnis mit Shell-Scriptlets, die .
sind (source
)-ed von /etc/profile
; die Fragmente hier sind pro Shell, mit *.sh
gelten für alle Bourne/POSIX-kompatiblen Shells und andere Erweiterungen, die für diese bestimmte Shell gelten.
Lösung 2:
.profil
.profile
ist für Dinge, die nicht speziell mit Bash
zusammenhängen , wie Umgebungsvariablen PATH
und Freunden und sollte jederzeit verfügbar sein.
Beispiel:.profile
sollte auch geladen werden, wenn eine grafische Desktopsitzung gestartet wird.
.bashrc
.bashrc
ist für die Konfiguration der interaktiven Bash-Nutzung, wie Bash aliases
, indem Sie Ihren bevorzugten editor
einstellen , indem Sie den Bash prompt
setzen usw.
.bash_profile
.bash_profile stellt sicher, dass beide Dinge in .profile
und .bashrc
werden für login shells
geladen .
Beispiel:.bash_profile
könnte etwas Einfaches sein wie
. ~/.profile
. ~/.bashrc
Wenn Sie .bashrc
weglassen würden , nur .profile
geladen werden.
Lösung 3:
Laut der Bash-Manpage .bash_profile
wird für Login-Shells ausgeführt, während .bashrc
wird für interaktive Nicht-Login-Shells ausgeführt.
Also, was ist eine Anmelde- oder Nicht-Anmelde-Shell?
Wenn Sie sich über die Konsole anmelden (Benutzername und Passwort eingeben), entweder an der Maschine sitzend, oder remote über ssh:.bash_profile
wird ausgeführt, um Ihre Shell vor der anfänglichen Eingabeaufforderung zu konfigurieren. Wenn Sie sich jedoch bereits bei Ihrem Computer angemeldet haben und ein neues Terminalfenster (xterm) in Gnome oder KDE öffnen, dann .bashrc
wird vor der Fenstereingabeaufforderung ausgeführt. .bashrc
wird auch ausgeführt, wenn Sie eine neue Bash-Instanz starten, indem Sie /bin/bash
eingeben in einem Terminal.
Eine Ausnahme von den Richtlinien für Terminalfenster ist Terminal.app von Mac OS X, die standardmäßig für jedes neue Terminalfenster eine Anmelde-Shell ausführt und .bash_profile
aufruft statt .bashrc
. Andere GUI-Terminal-Emulatoren können dasselbe tun, aber die meisten neigen nicht dazu.
Mehr hier.