Was ist das.bashrc-Datei?

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

 114
Author: crisron, 2009-09-30

3 answers

Eigentlich ist es bash speziell, dass liest .bashrc (und /etc/bash.bashrc). Es gibt viele verschiedene Muscheln.

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 nicht eine Login-Shell wird gestartet, bash liest und führt Befehle aus ~/.bashrc, wenn diese Datei existiert. Dies kann sein gehemmt mit der Option --norc. Die Dateioption --rcfile zwingen bash zum Lesen und Ausführen von Befehlen von datei statt ~/.bashrc.

Wenn bash gestartet wird nicht interaktiv, um eine Shell auszuführen skript, zum Beispiel, es sucht nach dem variable BASH_ENV in der Umgebung, erweitert seinen Wert, wenn er dort angezeigt wird, und verwendet den erweiterten Wert als die name einer Datei zum Lesen und Ausführen. Bash verhält sich wie folgt befehl ausgeführt wurden:

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

Der Wert der Variablen PATH wird jedoch nicht zum Suchen verwendet für die Dateinamen.

Die Datei ist nur shell-Befehle. 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, aber bash hat so viele Erweiterungen, dass sie eine eigene Startdatei für Benutzer benötigt, die bashisms in Startdateien einfügen möchten.

"Keine Login-Shell " bedeutet Dinge wie Skriptstarts und normalerweise Terminalfenster, die von Fenstermanagern gestartet werden. Manchmal bin ich richten Sie *nix-Systeme so ein, dass .bashrc und BASH_ENV nur .profile. Solange Sie sich nicht außerhalb der POSIX-Shell-Befehle bewegen, erhalten Sie in jeder Shell die gleiche Initialisierung.

Es ist besonders wertvoll, wenn sh wirklich bash ist, was manchmal passiert. Verwenden Sie dazu:

. .profile

Ein Grund, warum dies alles so komplex ist, ist, dass manchmal Leute Dinge, die Ausgabe erzeugen, in Shell-Startdateien einfügen oder bedingungslos Eingabeaufforderungen festlegen. Dies verursacht viele Probleme, wenn ausführen von Shell-Programmen und Backtick-Befehlen in Sprachen, ganz zu schweigen von system(3) aus C-Programmen. Die Art und Weise bash startet, ist entworfen, glaube ich, habe eine Datei, in denen Ausgangs-und prompt Einstellung ist OK, und eine Datei, wo es ist nicht. Traditionell ist eine Laufzeit-test würde durchgeführt werden, um zu unterscheiden, Interaktivität, für Beispiel, überprüfen, um zu sehen, ob die Eingabeaufforderung eingestellt ist.

 73
Author: DigitalRoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-05-30 03:48:31

Wenn Bash startet, führt es die Befehle in verschiedenen Skripten aus.

Wenn Bash als interaktive Anmeldeshell aufgerufen wird, liest und führt es zuerst Befehle aus der Datei / etc / profile aus, falls diese Datei vorhanden ist. Nach dem Lesen dieser Datei wird nach ~/gesucht.bash_profile,~/.bash_login und ~/.profil, in dieser Reihenfolge, und liest und führt Befehle von der ersten, die vorhanden und lesbar ist.

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

Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest und führt Bash Befehle von ~/aus.bashrc, wenn diese Datei existiert. Dies kann durch Verwendung der Option --norc gehemmt werden. Die Option --rcfile file zwingt Bash, Befehle aus file anstelle von ~/zu lesen und auszuführen.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

Lassen Sie uns versuchen, die Eingabeaufforderung so einzustellen, dass Datum und Hostname des heutigen Tages angezeigt werden können:

PS1="\d \h $ "
 13
Author: randomx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-01 20:58:08

Es sollte verschiedene "Initialisierungsbefehle" für Ihre Shell enthalten, zB:

  • Erstellen nützlicher Aliase (z. B. alias ll='ls -l').
  • Hinzufügen weiterer Verzeichnisse zum PFAD.
  • Neue Umgebungsvariablen setzen.
 11
Author: Roman Zeyde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-09-30 15:56:46