Eigentlich bash
liest gerade .bashrc
(und /etc/bash.bashrc
). Es gibt viele verschiedene Muscheln.
Die bash-Manpage (von Brian Fox und Chet Ramey; auch Infoseite "Bash-Startdateien" ) ist die maßgebliche Referenz:
Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest und führt bash Befehle aus
~/.bashrc
, falls diese Datei vorhanden ist. Dies kann durch Verwendung der--norc
Option verhindert werden. Die--rcfile
Dateioption zwingt bash zum Lesen und Ausführen von Befehlen aus der Datei anstelle von~/.bashrc
.Wenn Bash nicht interaktiv gestartet wird, sucht es zum Beispiel nach einem Shell-Skript nach der Variablen
BASH_ENV
in der Umgebung, vergrößert seinen Wert, wenn es dort angezeigt wird, und verwendet den erweiterten Wert als Namen einer Datei zum Lesen und Ausführen. Bash verhält sich so, als ob der folgende Befehl ausgeführt würde:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
Der Wert der
PATH
Variablen wird jedoch nicht zur Suche nach dem Dateinamen verwendet.
Die Datei besteht nur aus Shellbefehlen. Es wird normalerweise verwendet, um Eingabeaufforderungen zu ändern, Umgebungsvariablen festzulegen und Shell-Prozeduren zu definieren. Traditionell wird die Datei .profile
für diesen Zweck verwendet, bash
hat jedoch so viele Erweiterungen, dass sie eine eigene Startdatei für Benutzer benötigt, die Bashmis in Startdateien einfügen möchten .
" Keine Login-Shell " bedeutet Dinge wie das Starten von Skripts und normalerweise Fenster, die von Fenstermanagern gestartet werden. Manchmal stellte ich * nix - Systeme haben .bashrc
und BASH_ENV
nur Quelle .profile
. Solange Sie sich nicht außerhalb der POSIX-Shellbefehle befinden, erhalten Sie in jeder Shell dieselbe Initialisierung.
Es ist besonders wertvoll, wenn sh
es wirklich ist bash
, was manchmal passiert. Verwenden Sie dazu:
. .profile
Ein Grund, warum das alles so komplex ist, ist, dass manchmal Dinge, die Ausgaben erzeugen, in Shell-Startdateien abgelegt werden oder dass sie bedingungslos Eingabeaufforderungen festlegen. Dies führt zu zahlreichen Problemen beim Ausführen von Shell-Programmen und Backtick-Befehlen innerhalb von Sprachen, ganz zu schweigen system(3)
von C-Programmen. bash
Ich denke, der Weg beim Start ist so ausgelegt, dass er eine Datei hat, in der die Ausgabe- und Eingabeaufforderung in Ordnung ist, und eine Datei, in der es nicht ist. Normalerweise wird ein Laufzeittest durchgeführt, um die Interaktivität zu unterscheiden. Beispielsweise wird geprüft, ob die Eingabeaufforderung festgelegt ist.