Was ist die .bashrc-Datei?

307683
pineapple

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

93
Versuchen Sie, die Datei in einem Texteditor zu öffnen - sie ist in reinem Text. Will Bickford vor 15 Jahren 2

3 Antworten auf die Frage

62
DigitalRoss

Eigentlich bashliest 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 --norcOption verhindert werden. Die --rcfileDateioption 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_ENVin 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 PATHVariablen 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 .profilefür diesen Zweck verwendet, bashhat 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 .bashrcund BASH_ENVnur Quelle .profile. Solange Sie sich nicht außerhalb der POSIX-Shellbefehle befinden, erhalten Sie in jeder Shell dieselbe Initialisierung.

Es ist besonders wertvoll, wenn shes 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. bashIch 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.

Gute Antwort. Nur ein Zitat: Die Datei besteht nur aus Shell-Befehlen. Es wird normalerweise verwendet, um Eingabeaufforderungen zu ändern, Umgebungsvariablen festzulegen und Shell-Prozeduren zu definieren. smwikipedia vor 13 Jahren 0
Weiß jemand, was der rc-Teil von .bashrc / .zshrc bedeutet? WORMSS vor 9 Jahren 2
@ WORMSS: Gute Frage! [Sie sind nicht der einzige, der sich darüber wundert] (https://unix.stackexchange.com/questions/3467/what-does-rc-in-bashrc-stand-for). Caleb Xu vor 9 Jahren 4
Vielleicht bedeutet rc Laufzeitkonfiguration. Mike Diehn vor 5 Jahren 0
12
randomx

Beim Start von Bash werden die Befehle in verschiedenen Skripts ausgeführt.

Wenn Bash als interaktive Login-Shell aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle aus dem ersten vorhandenen Befehl aus, der lesbar ist.

Wenn eine Login-Shell beendet wird, liest und führt Bash Befehle aus der Datei ~ / .bash_logout aus, sofern vorhanden.

Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest und führt Bash Befehle aus ~ / .bashrc aus, sofern diese Datei vorhanden ist. Dies kann mit der Option --norc verhindert werden. Die Dateioption --rcfile zwingt Bash, Befehle aus der Datei anstelle von ~ / .bashrc zu lesen und auszuführen.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Hier einige Tricks und Tipps:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Versuchen wir, die Eingabeaufforderung so einzustellen, dass sie das heutige Datum und den Hostnamen anzeigen kann:

PS1="\d \h $ " 
Warum ist `.profile` nach` .bash_profile`? Irgendwelche Logik? Pacerier vor 6 Jahren 1
10
Roman Zeyde

Es sollte verschiedene "Initialisierungs" -Befehle für Ihre Shell enthalten, zB:

  • Nützliche Aliase erstellen (zum Beispiel alias ll='ls -l').
  • Hinzufügen weiterer Verzeichnisse zu PATH.
  • Neue Umgebungsvariablen setzen
Was ist ein Alias? pineapple vor 15 Jahren 0
@ pineapple: Ein Alias ​​ist ein Weg, um einen Befehl auszuführen, der lang sein kann, mit einem kürzeren. Mit dem Alias ​​"ll =" ls -l "" können Sie beispielsweise "ll" eingeben, um den Befehl "ls -l" auszuführen. Wuffers vor 13 Jahren 2