Was ist der Unterschied zwischen .bashrc, .bash_profile und .environment?
-
03-07-2019 - |
Frage
Ich habe eine Reihe von verschiedenen * nix-basierten Systemen der Jahre verwendet, und es scheint, wie jeder Geschmack von Bash ich einen anderen Algorithmus-Skripte für die Entscheidung, welche Start hat verwenden zu laufen. Für die Zwecke der Aufgaben wie das Einrichten von Umgebungsvariablen und Aliase und Drucken Startmeldungen (z motds), das Startskript der geeignete Ort ist, diese zu tun?
Was ist der Unterschied zwischen den Dingen in .bashrc
, .bash_profile
und .environment
setzen? Ich habe auch andere Dateien wie .login
, .bash_login
und .profile
gesehen; sind diese immer relevant? Was sind die Unterschiede, in denen diejenigen laufen lassen, wenn sie in physisch anmelden, in der Ferne über ssh anmelden und ein neues Terminal-Fenster öffnen? Gibt es signifikante Unterschiede zwischen den Plattformen (einschließlich Mac OS X (und seine Terminal.app) und Cygwin Bash)?
Lösung
Der Hauptunterschied mit Shell Config-Dateien ist, dass einige nur durch „login“ Schalen gelesen werden (z. B., wenn Sie von einem anderen Host anmelden, oder Login in der Textkonsole einer lokalen Unix-Maschine). diese sind diejenigen genannt, sagen wir, .login
oder .profile
oder .zlogin
(je nachdem, welche Shell Sie verwenden).
Dann haben Sie Konfigurationsdateien, die von „interaktiven“ Schalen gelesen werden (wie in, diejenigen mit einem Anschluss (oder Pseudo-Terminal im Falle von beispielsweise einem Terminal-Emulator unter einem Windowing-System ausgeführt wird). Dies sind die diejenigen mit Namen wie .bashrc
, .tcshrc
, .zshrc
, etc.
bash
erschwert dies in diesem .bashrc
ist nur durch eine Schale lesen, die beide ist interaktiv und nicht-login , so dass Sie die meisten finden Menschen am Ende ihrer .bash_profile
erzählen bis auch .bashrc
mit so etwas wie
[[ -r ~/.bashrc ]] && . ~/.bashrc
Andere Shells verhalten sich anders - z. B. mit zsh
wird .zshrc
immer für eine interaktive Shell zu lesen, ob es ein Login eines oder nicht
Die manuelle Seite für bash erklärt die Umstände, unter denen jede Datei gelesen wird. Ja, das Verhalten ist im Allgemeinen zwischen Maschinen.
.profile
ist einfach der Anmeldeskript Dateiname ursprünglich von /bin/sh
verwendet. bash
, wobei generell abwärtskompatibel mit /bin/sh
wird .profile
lesen, wenn ein solches vorhanden ist.
Andere Tipps
Das ist ganz einfach. Es erklärt in 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
Login Schalen sind diejenigen, die man gelesen werden Sie sich einloggen (ja, sie sind nicht nur ausgeführt, wenn xterm Anfahren, zum Beispiel). Es gibt auch andere Möglichkeiten, um sich einzuloggen. Zum Beispiel mit einem X-Display-Manager. Die haben andere Möglichkeiten, und Export von Umgebungsvariablen bei der Anmeldung zu lesen.
Auch die INVOCATION
Kapitel im Handbuch lesen. Er sagt, „Die folgenden Abschnitte beschreiben, wie bash seine Startdateien ausführt.“ , ich denke, das ist ein Spot-on :) Es wird erklärt, was eine „interaktive“ Shell auch.
Bash weiß nicht, über .environment
. Ich vermute, das ist eine Datei von Ihrer Distribution, Umgebungsvariablen zu setzen, unabhängig von der Schale, die Sie fahren.
Classically, ~/.profile
wird von Bourne-Shell verwendet, und wird wahrscheinlich durch Bash als Vermächtnis Maßnahme unterstützt. Auch von C Shell verwendet ~/.login
und ~/.cshrc
wurden. - Ich bin nicht sicher, dass Bash sie überhaupt verwendet
Die ~/.bash_profile
würde einmal verwendet werden, bei der Anmeldung. Das ~/.bashrc
Skript wird jedes Mal eine Shell gestartet lesen. Dies ist analog für C Shell /.cshrc
.
Eine Folge davon ist, dass Sachen in ~/.bashrc
sollten so leicht (minimal) wie möglich sein, den Aufwand zu reduzieren, wenn ein Nicht-Login-Shell zu starten.
Ich glaube, die ~/.environment
Datei eine Kompatibilitätsdatei für Korn-Shell ist.
Ich fand Informationen über Bashrc und Bash_profile hier um es zusammenzufassen:
Bash_profile wird ausgeführt, wenn Sie Anmeldung. Stuff Sie setzen es in sein könnte PATH und andere wichtige Umgebungsvariablen.
Bashrc wird für nicht Login-Shells verwendet. Ich bin mir nicht sicher, was das bedeutet. ich weiß dass RedHat führt sie jedes Mal wenn Sie beginnen eine weitere Schale (su an diesen Benutzer oder einfach Aufruf bash wieder) Sie könnten will Aliase in dort setzen, aber wieder Ich bin nicht sicher, was das bedeutet. ich einfach ignoriert es selbst.
.profile ist das Äquivalent von .bash_profile für die Wurzel. Ich denke der Name geändert werden andere zu lassen Schalen (csh, sh, tcsh) es auch verwenden. (Sie brauchen nicht ein als Benutzer)
Es gibt auch .bash_logout Wich ja gute Vermutung ... Abmeldung führt bei. Vielleicht möchten Sie deamons stoppen oder sogar macht einen kleinen Haushalt. Du kannst auch „klar“ dort hinzufügen, wenn Sie möchten, löschen Sie den Bildschirm, wenn Sie sich abmelden.
Auch gibt es eine komplett auf jedem der Konfigurationsdateien folgen hier
Diese sind wahrscheinlich sogar distro. abhängig, nicht alle Distros wählen jedes configuraton mit ihnen haben, und einige haben sogar noch mehr. Aber wenn sie den gleichen Namen haben, sind sie usualy den gleichen Inhalt.
Nach Josh Staiger , Mac OS X Terminal.app tatsächlich eine Login-Shell läuft eher als ein nicht-Login-Shell standardmäßig für jeden neuen Terminalfenster aufrufen anstelle von Bashrc Bash_profile.
Er empfiehlt:
Die meisten der Zeit, die Sie wollen nicht zwei separate Konfigurationsdateien pflegen für die Anmeldung und Nicht-Login-Shells - wenn Sie einen Pfad festlegen, möchten Sie es gilt sowohl für. Sie können dieses Problem beheben, indem Sourcing Bashrc von Ihrem .bash_profile-Datei, dann PATH und allgemeine Einstellungen in .bashrc setzen.
Um dies zu tun, fügen Sie die folgenden Zeilen in .bash_profile:
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
Wenn Sie sich jetzt anmelden, um Ihre Maschine von einer Konsole Bashrc aufgerufen wird.
Ein guter Ort, um zu buchen, ist der Mann Seite der bash. Hier ist eine Online-Version. Suchen Sie nach „Invocation“ Abschnitt.
Ich habe Debian-Familie distros verwendet, die .profile
auszuführen erscheinen, aber nicht .bash_profile
,
während RHEL Derivate ausführen .bash_profile
vor .profile
.
Es scheint ein Chaos zu sein, wenn Sie in jedem Linux-Betriebssystem einzurichten Umgebungsvariablen zu arbeiten.