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?
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.
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 $ "
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.
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