Cet article explique la séquence dans laquelle les fichiers suivants sont exécutés :
- /etc/profil
- ~/.bash_profile
- ~/.bashrc
- ~/.bash_login
- ~/.profile
- ~/.bash_logout
Séquence d'exécution du shell de connexion interactif
Le pseudo code suivant explique la séquence d'exécution de ces fichiers.
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
Lorsque vous vous déconnectez du shell interactif, voici la séquence d'exécution :
IF ~/.bash_logout exists THEN execute ~/.bash_logout END IF
Veuillez noter que /etc/bashrc est exécuté par ~/.bashrc comme indiqué ci-dessous :
# cat ~/.bashrc if [ -f /etc/bashrc ]; then . /etc/bashrc fi
Séquence d'exécution du shell interactif sans connexion
Lors du lancement d'un shell interactif sans connexion, voici la séquence d'exécution :
IF ~/.bashrc exists THEN execute ~/.bashrc END IF
Remarque : Lorsqu'un shell non interactif démarre, il recherche la variable d'environnement ENV et exécute la valeur de nom de fichier mentionnée dans la variable ENV.
Tester la séquence d'exécution
L'une des façons de tester la séquence d'exécution consiste à ajouter différentes valeurs PS1 à ces fichiers et à vous reconnecter au shell et à voir quelle valeur PS1 a été récupérée par l'invite Linux. De plus, nous avons discuté plus tôt de la façon d'utiliser PS1 pour rendre votre invite Linux à la fois fonctionnelle et élégante.
# 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>
Veuillez vous assurer que ~/.bash_profile n'a pas de PS1 pour que ce qui précède fonctionne correctement.
/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>
~/.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>
~/.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>
~/.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>
Si vous aimez cet article, veuillez le mettre en signet sur del.icio.us et Trébucher .