2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

Was ist die .bashrc-Datei?

Unix-Shells beim Start lesen die .bashrc-Datei und führen darin geschriebene Befehle aus. Was ist diese Datei und was führt sie aus?

Antworten (3)

69
69
69
2009-09-30 15:57:31 +0000

Eigentlich lautet bash speziell .bashrc (und /etc/bash.bashrc). Es gibt viele verschiedene Shells.

Die bash man page (von Brian Fox und Chet Ramey; auch info page “Bash Startup Files” ) ist die maßgebliche Referenz:

Wenn eine interaktive Shell, die keine Login-Shell ist, gestartet wird, liest die bash die Datei ~/.bashrc und führt Befehle aus --norc aus, falls diese Datei existiert. Dies kann durch die Verwendung der Option --rcfile verhindert werden. Die Option ~/.bashrc file zwingt die bash zum Lesen und Ausführen von Befehlen aus einer Datei anstelle von BASH_ENV.

Wenn die bash nicht-interaktiv gestartet wird, um z.B. ein Shell-Skript auszuführen, sucht sie in der Umgebung nach der Variablen PATH, expandiert ihren Wert, wenn sie dort erscheint, und verwendet den expandierten Wert als Namen einer Datei zum Lesen und Ausführen. Die Bash verhält sich so, als würde der folgende Befehl ausgeführt:

if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi

aber der Wert der Variablen .profile wird nicht zur Suche nach dem Dateinamen verwendet.

Die Datei besteht nur aus Shell-Befehlen. Sie wird normalerweise verwendet, um Prompts zu ändern, Umgebungsvariablen zu setzen und Shell-Prozeduren zu definieren. Traditionell wird zu diesem Zweck die Datei bash verwendet, aber .bashrc hat so viele Erweiterungen, dass sie eine eigene Startdatei für Benutzer benötigt, die bashisms in Startdateien setzen wollen.

Nicht eine Anmeldeshell” bedeutet Dinge wie Skript-Starts und normalerweise Terminalfenster, die von Windowmanagern gestartet werden. Manchmal richte ich *nix-Systeme so ein, dass BASH_ENV und .profile nur sh als Quelle haben. Solange Sie sich nicht außerhalb der POSIX-Shell-Befehle bewegen, werden Sie in jeder Shell die gleiche Initialisierung erhalten.

Besonders wertvoll ist es, wenn bash wirklich system(3) ist, was manchmal passiert. Verwenden Sie dazu:

. .profile

Ein Grund, warum das alles so komplex ist, liegt darin, dass manchmal Leute Dinge, die Ausgabe produzieren, in Shell-Startdateien legen oder Prompts bedingungslos setzen. Dies verursacht viele Probleme beim Ausführen von Shell-Programmen und Backtick-Befehlen innerhalb von Sprachen, ganz zu schweigen von bash aus C-Programmen. Die Art und Weise, wie &007 gestartet wird, ist, glaube ich, so ausgelegt, dass es eine Datei gibt, in der die Ausgabe und die Einstellung der Prompts in Ordnung ist, und eine Datei, in der das nicht der Fall ist. Traditionell wird ein Laufzeittest durchgeführt, um Interaktivität zu unterscheiden, z.B. um zu prüfen, ob die Eingabeaufforderung eingestellt ist.

12
12
12
2009-09-30 15:56:30 +0000

Wenn die Bash startet, führt sie die Befehle in einer Vielzahl verschiedener Skripte aus.

Wenn die Bash als interaktive Login-Shell aufgerufen wird, liest sie zunächst die Datei /etc/profile ein und führt Befehle aus, falls diese Datei existiert. Nachdem sie diese Datei gelesen hat, sucht sie nach ~/.bash_profile, ~/.bash_login und ~/.profile, in dieser Reihenfolge, und liest und führt Befehle aus der ersten Datei aus, die existiert und lesbar ist.

Wenn eine Login-Shell beendet wird, liest die Bash Befehle aus der Datei ~/.bash_logout, falls sie existiert, und führt sie aus.

Wenn eine interaktive Shell, die keine Login-Shell ist, gestartet wird, liest die Bash Befehle aus ~/.bashrc, falls diese Datei existiert, und führt sie aus. Dies kann durch die Verwendung der Option –norc verhindert werden. Die Option –rcfile file zwingt die Bash zum Lesen und Ausführen von Befehlen aus einer Datei anstelle von ~/.bashrc. http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Hier sind einige Tricks und Tipps: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Versuchen wir, den Prompt so einzustellen, dass er das heutige Datum und den Hostnamen anzeigen kann:

PS1="\d \h $ "
10
10
10
2009-09-30 15:56:46 +0000

Er sollte verschiedene “Initialisierungs”-Befehle für Ihre Shell enthalten, z.B.:

  • Erstellen nützlicher Aliase (z.B. alias ll='ls -l').
  • Hinzufügen weiterer Verzeichnisse zu PATH.
  • Setzen neuer Umgebungsvariablen.