GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ausführungsreihenfolge für .bash_profile, .bashrc, .bash_login, .profile und .bash_logout

Dieser Artikel erklärt die Reihenfolge, in der die folgenden Dateien ausgeführt werden:

  • /etc/profile
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.bash_login
  • ~/.profile
  • ~/.bash_logout

Ausführungssequenz für interaktive Login-Shell

Der folgende Pseudocode erklärt die Abfolge der Ausführung dieser Dateien.

execute /etc/profile
IF ~/.bash_profile exists THEN
    execute ~/.bash_profile
ELSE
    IF ~/.bash_login exist THEN
        execute ~/.bash_login
    ELSE
        IF ~/.profile exist THEN
            execute ~/.profile
        END IF
    END IF
END IF

Wenn Sie sich von der interaktiven Shell abmelden, ist die folgende Ausführungsreihenfolge:

IF ~/.bash_logout exists THEN
    execute ~/.bash_logout
END IF

Bitte beachten Sie, dass /etc/bashrc wie unten gezeigt von ~/.bashrc ausgeführt wird:

# cat ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

Ausführungssequenz für interaktive Nicht-Login-Shell

Beim Starten einer interaktiven Shell ohne Anmeldung ist die folgende Ausführungssequenz:

IF ~/.bashrc exists THEN
    execute ~/.bashrc
END IF

Hinweis: Wenn eine nicht-interaktive Shell gestartet wird, sucht sie nach der Umgebungsvariablen ENV und führt den Dateinamenwert aus, der in der ENV-Variablen erwähnt wird.

Testen Sie die Ausführungsreihenfolge

Eine Möglichkeit, die Ausführungsreihenfolge zu testen, besteht darin, diesen Dateien verschiedene PS1-Werte hinzuzufügen, sich erneut bei der Shell anzumelden und zu sehen, welcher PS1-Wert von der Linux-Eingabeaufforderung erfasst wurde. Außerdem haben wir zuvor darüber gesprochen, wie Sie PS1 verwenden können, um Ihre Linux-Eingabeaufforderung sowohl funktional als auch elegant zu gestalten.

1. /etc/profile wird ausgeführt. Fügen Sie die folgende PS1-Zeile zu /etc/profile hinzu und melden Sie sich erneut an, um sicherzustellen, dass sich die Linux-Eingabeaufforderung in den PS1-Wert ändert, der in /etc/profile festgelegt ist.

# grep PS1 /etc/profile
PS1="/etc/profile> "

[Note: re-login to see the prompt change as shown below]
Last login: Sat Sep 27 16:43:57 2008 from 192.168.1.2
/etc/profile>

Bitte stelle sicher, dass ~/.bash_profile kein PS1 hat, damit das oben Genannte richtig funktioniert.

2. ~/.bash_profile wird ausgeführt: Fügen Sie die folgende PS1 zu ~/.bash_profile, ~/.bash_login, ~/.profile und ~/.bashrc hinzu. Melden Sie sich erneut an, um sicherzustellen, dass sich die Linux-Eingabeaufforderung wie unten gezeigt in den PS1-Wert ändert, der in  ~/.bash_profile festgelegt ist.

/etc/profile> grep PS1 ~/.bash_profile
export PS1="~/.bash_profile> "

/etc/profile> grep PS1 ~/.bash_login
export PS1="~/.bash_login> "

/etc/profile> grep PS1 ~/.profile
export PS1="~/.profile> "

/etc/profile> grep PS1 ~/.bashrc
export PS1="~/.bashrc> "

[Note: Upon re-login, it executed /etc/profile first and ~/.bash_profile next.
So, it took the PS1 from ~/.bash_profile as shown below.
It also did not execute ~/.bash_login, as ~/.bash_profile exists]
Last login: Sat Sep 27 16:48:11 2008 from 192.168.1.2
~/.bash_profile>

3. ~/.bash_login wird ausgeführt. Benennen Sie .bash_profile in etwas anderes um. Melden Sie sich erneut an, um sicherzustellen, dass sich die Linux-Eingabeaufforderung wie unten gezeigt in den PS1-Wert ändert, der in  ~/.bash_login festgelegt ist.

~/.bash_profile> mv .bash_profile bash_profile_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile, it executed ~/.bash_login]
Last login: Sat Sep 27 16:50:55 2008 from 192.168.1.2
~/bash_login>

4. ~/.profile wird ausgeführt. Benennen Sie die .bash_login in etwas anderes um. Melden Sie sich erneut an, um sicherzustellen, dass sich die Linux-Eingabeaufforderung wie unten gezeigt in den PS1-Wert ändert, der in  ~/.profile festgelegt ist.

~/.bash_login> mv .bash_login bash_login_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile and ~/.bash_login, it executed ~/.profile]
Last login: Sat Sep 27 16:56:36 2008 from 192.168.1.2
~/.profile>

5. ~/.bashrc wird für Shell-Tests ohne Anmeldung ausgeführt . Ausführen von bash“ an der Eingabeaufforderung wird eine weitere Nicht-Login-Shell angezeigt, die .bashrc wie unten gezeigt aufruft.

~/.profile> bash

[Note: This displays PS1 from .bashrc as shown below.]
~/.bashrc> exit
exit

[Note: After exiting from non-login shell, we are back to login shell]
~/.profile>


Wenn Ihnen dieser Artikel gefällt, markieren Sie ihn bitte auf del.icio.us und stolpern .


Linux
  1. Wie ich Ansible und Anacron für die Automatisierung verwende

  2. 10 Linux-Befehls-Tutorials für Anfänger und Experten

  3. Bash For Loop Guide und Beispiele

  4. Was macht . ~/.bashrc Befehl Tun??

  5. Code für Malloc und kostenlos

Top 10 Linux-Distributionen für Laptop und Desktop

.bashrc vs. .bash_profile

Installations- und Verwendungsleitfaden für die CSF-Firewall

So sichern und wiederherstellen Sie eine SD-Karte für Raspberry Pi

Ribbon-Schnittstelle für GTK und Qt

Aktivieren sudo und .profile/.bashrc die Eskalation trivialer Berechtigungen?