Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle und führt sie aus ~/.bashrc, sofern diese Datei vorhanden ist. Dies kann durch Verwendung der --norcOption verhindert werden. Die --rcfileDateioption erzwingt, dass Bash Befehle aus der Datei liest und ausführt, anstatt ~/.bashrc.
Wenn bash nicht interaktiv gestartet wird, um beispielsweise ein Shell-Skript auszuführen, sucht es nach der Variablen BASH_ENVin der Umgebung, erweitert ihren Wert, wenn sie dort angezeigt wird, und verwendet den erweiterten Wert als Namen einer Datei, die gelesen und ausgeführt werden soll. Bash verhält sich so, als ob der folgende Befehl ausgeführt wurde:
if[-n "$BASH_ENV"];then."$BASH_ENV";fi
Der Wert der PATHVariablen wird jedoch nicht für die Suche nach dem Dateinamen verwendet.
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 .profilefür diesen Zweck verwendet, bashhat jedoch so viele Erweiterungen, dass sie eine eigene Startdatei für Benutzer benötigt, die Bashismen in Startdateien einfügen möchten .
" Keine Anmeldeshell " bedeutet Dinge wie Skriptstarts und normalerweise Terminalfenster, die von Fenstermanagern gestartet werden. Manchmal stellte ich * nix - Systeme haben .bashrcund BASH_ENVnur Quelle .profile. Solange Sie sich nicht von POSIX-Shell-Befehlen entfernen, 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 dies alles so komplex ist, ist, dass Benutzer manchmal Dinge, die eine Ausgabe erzeugen, in Shell-Startdateien ablegen oder bedingungslos Eingabeaufforderungen festlegen. Dies verursacht viele Probleme beim Ausführen von Shell-Programmen und Backtick-Befehlen innerhalb von Sprachen, ganz zu schweigen system(3)von C-Programmen. bashIch denke, die Art und Weise, wie das System gestartet wird, ist darauf ausgelegt, eine Datei zu haben, bei der die Ausgabe- und Eingabeaufforderungseinstellung in Ordnung ist, und eine Datei, bei der dies nicht der Fall ist. Herkömmlicherweise wird ein Laufzeit-Test durchgeführt, um die Interaktivität zu unterscheiden, z. B. um zu überprüfen, ob die Eingabeaufforderung festgelegt ist.
Gute Antwort. Nur ein paar Zitate: Die Datei besteht nur aus Shell-Befehlen. Es wird normalerweise verwendet, um Eingabeaufforderungen zu ändern, Umgebungsvariablen festzulegen und Shell-Prozeduren zu definieren.
Smwikipedia
2
Weiß jemand, was der rc-Teil von .bashrc / .zshrc bedeutet?
Beim Start von Bash werden die Befehle in verschiedenen Skripten ausgeführt.
Wenn Bash als interaktive Anmeldeshell aufgerufen wird, liest es zuerst die Befehle aus der Datei / etc / profile und führt sie aus, 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 von der ersten Datei aus, die vorhanden und lesbar ist.
Wenn eine Anmeldeshell beendet wird, liest Bash Befehle aus der Datei ~ / .bash_logout und führt sie aus, falls vorhanden.
Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist. Dies kann mit der Option --norc verhindert werden. Die Option --rcfile file erzwingt, dass Bash anstelle von ~ / .bashrc Befehle aus der Datei liest und ausführt.
@pineapple: Ein Alias ist eine Möglichkeit, einen möglicherweise langen Befehl mit einem kürzeren Befehl auszuführen. Mit dem Alias ll='ls -l'können Sie beispielsweise llden ls -lBefehl ausführen .
Antworten:
Eigentlich ist es
bash
genau das, was liest.bashrc
(und/etc/bash.bashrc
). Es gibt viele verschiedene Muscheln.Die Bash-Manpage (von Brian Fox und Chet Ramey; auch Infoseite "Bash Startup Files" ) ist die maßgebliche Referenz:
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,bash
hat jedoch so viele Erweiterungen, dass sie eine eigene Startdatei für Benutzer benötigt, die Bashismen in Startdateien einfügen möchten ." Keine Anmeldeshell " bedeutet Dinge wie Skriptstarts und normalerweise Terminalfenster, die von Fenstermanagern gestartet werden. Manchmal stellte ich * nix - Systeme haben
.bashrc
undBASH_ENV
nur Quelle.profile
. Solange Sie sich nicht von POSIX-Shell-Befehlen entfernen, erhalten Sie in jeder Shell dieselbe Initialisierung.Es ist besonders wertvoll, wenn
sh
es wirklich istbash
, was manchmal passiert. Verwenden Sie dazu:Ein Grund, warum dies alles so komplex ist, ist, dass Benutzer manchmal Dinge, die eine Ausgabe erzeugen, in Shell-Startdateien ablegen oder bedingungslos Eingabeaufforderungen festlegen. Dies verursacht viele Probleme beim Ausführen von Shell-Programmen und Backtick-Befehlen innerhalb von Sprachen, ganz zu schweigen
system(3)
von C-Programmen.bash
Ich denke, die Art und Weise, wie das System gestartet wird, ist darauf ausgelegt, eine Datei zu haben, bei der die Ausgabe- und Eingabeaufforderungseinstellung in Ordnung ist, und eine Datei, bei der dies nicht der Fall ist. Herkömmlicherweise wird ein Laufzeit-Test durchgeführt, um die Interaktivität zu unterscheiden, z. B. um zu überprüfen, ob die Eingabeaufforderung festgelegt ist.quelle
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, die Eingabeaufforderung so einzustellen, dass das heutige Datum und der heutige Hostname angezeigt werden:
quelle
.profile
nach.bash_profile
? Irgendeine Logik?Es sollte verschiedene "Initialisierungs" -Befehle für Ihre Shell enthalten, zB:
alias ll='ls -l'
).quelle
ll='ls -l'
können Sie beispielsweisell
denls -l
Befehl ausführen .