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)?

War es hilfreich?

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

lesen

[[ -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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top