.bashrc
und .bash_profile
sind keine Skripte. Es handelt sich um eine Konfigurationsdatei, die bei jeder bash
Ausführung auf zwei Arten abgerufen wird:
Der Abschnitt INVOCATION auf der bash-Manpage ist relevant.
Eine Login-Shell ist eine Shell, deren erstes Zeichen des Arguments Null ein ist -
, oder eine Shell , die mit der --login
Option gestartet wurde .
Eine interaktive Shell wird ohne Nicht-Options-Argumente und ohne die -c
Option gestartet, deren Standardeingabe und Fehler beide mit Terminals verbunden sind (wie von festgelegt isatty(3))
oder mit der -i
Option gestartet) . PS1 wird festgelegt und $-
enthält i
if bash
ist interaktiv und ermöglicht ein Shell-Skript oder eine Startdatei, um diesen Status zu testen.
In den folgenden Absätzen wird beschrieben, wie bash
die Startdateien ausgeführt werden. Wenn eine der Dateien existiert, aber nicht gelesen werden kann, meldet bash einen Fehler. Tilden werden in Dateinamen erweitert , wie nachstehend unter
Tilde Expansion im EXPANSION Abschnitt.
Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der --login
Option aufgerufen wird , werden zuerst Befehle aus der Datei gelesen und ausgeführt /etc/profile
, sofern diese Datei vorhanden ist. Nachdem die Datei zu lesen, sucht er nach ~/.bash_profile
,
~/.bash_login
und ~/.profile
in dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist. Die
--noprofile
Option kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu unterbinden.
Wenn eine Anmeldeshell beendet wird, liest bash Befehle aus der Datei und führt sie aus ~/.bash_logout
, sofern sie vorhanden ist.
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 --norc
Option verhindert werden. Die --rcfile file
Option erzwingt, dass Bash Befehle aus der Datei liest und ausführt, anstatt ~/.bashrc
.
Sie können steuern, wann sie über die Befehlszeilenoptionen --norc
und geladen werden --noprofile
. Sie können auch die Position überschreiben, an der sie mithilfe des --rcfile
Schalters geladen werden .
Wie bereits erwähnt, können Sie nachahmen, wie diese Dateien mithilfe des source <file>
Befehls oder mithilfe des . <file>
Befehls geladen werden .
Stellen Sie sich diese Funktionalität am besten wie folgt vor:
- Bash startet mit einer nackten Umgebung
- bash öffnet dann eine dieser Dateien (abhängig davon, wie sie als interaktiv oder als Login aufgerufen wurden) und dann ...
- ... Zeile für Zeile führt jeden Befehl in der Datei aus ...
- Wenn der Vorgang abgeschlossen ist, wird die Steuerung in Form einer Eingabeaufforderung ausgeführt und auf die Eingabe gewartet
Methoden zum Aufrufen
Dieses Thema scheint von Zeit zu Zeit zu erscheinen. Hier finden Sie eine kurze Übersicht über die verschiedenen Aufrufmöglichkeiten bash
und deren Auswirkungen. HINWEIS: Ich habe die Meldungen "sourced $ HOME / .bashrc" und "sourced" hinzugefügt $ HOME / .bash_profile "in die entsprechenden Dateien.
grundlegende Anrufe
bash -i
$ bash -i
sourced /home/saml/.bashrc
bash -l
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -il -or- bash -li
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
HINWEIS: Beachten Sie, dass der -c
Switch keine der Dateien als Quelle hat!
Deaktivieren des Lesens von Konfigurationsdateien
bash --norc
$ bash --norc
bash-4.1$
bash - noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
bash --norc -i
$ bash --norc -i
bash-4.1$
bash --norc -l
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -or- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Esoterischere Wege, Bash zu nennen
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash -norc -rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Diese sind gescheitert
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
Es gibt wahrscheinlich mehr, aber Sie verstehen es, hoffentlich ....
Was sonst?
Wenn Sie von diesem Thema so begeistert sind, dass Sie mehr darüber lesen / erforschen möchten, empfehle ich Ihnen dringend, sich das Handbuch für Bash-Anfänger anzuschauen, insbesondere Abschnitt 1.2. Vorteile der Bourne Again SHell . Die verschiedenen Unterabschnitte unter "1.2.2.1. Aufruf" bis "1.2.2.3.3. Verhalten der interaktiven Shell" erläutern die geringen Unterschiede zwischen den verschiedenen Möglichkeiten, die Sie aufrufen können bash
.