Questo articolo spiegherà la sequenza in cui vengono eseguiti i seguenti file:
- /etc/profilo
- ~/.bash_profile
- ~/.bashrc
- ~/.bash_login
- ~/.profile
- ~/.bash_logout
Sequenza di esecuzione per shell di accesso interattiva
Il seguente pseudocodice spiega la sequenza di esecuzione di questi file.
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 Quando esci dalla shell interattiva, la sequenza di esecuzione è la seguente:
IF ~/.bash_logout exists THEN
execute ~/.bash_logout
END IF Si noti che /etc/bashrc viene eseguito da ~/.bashrc come mostrato di seguito:
# cat ~/.bashrc if [ -f /etc/bashrc ]; then . /etc/bashrc fi
Sequenza di esecuzione per shell interattiva senza login
Durante l'avvio di una shell interattiva senza login, la sequenza di esecuzione è la seguente:
IF ~/.bashrc exists THEN
execute ~/.bashrc
END IF Nota: Quando una shell non interattiva si avvia, cerca la variabile di ambiente ENV ed esegue il valore del nome file menzionato nella variabile ENV.
Verifica la sequenza di esecuzione
Uno dei modi per testare la sequenza di esecuzione è aggiungere diversi valori PS1 a questi file e accedere nuovamente alla shell e vedere quale valore PS1 è stato rilevato dal prompt di Linux. Inoltre, in precedenza abbiamo discusso su come utilizzare PS1 per rendere il tuo prompt Linux funzionale ed elegante.
1. /etc/profile viene eseguito. Aggiungi la seguente riga PS1 a /etc/profile ed esegui nuovamente il login per assicurarti che il prompt di Linux cambi nel valore PS1 impostato all'interno di /etc/profile.
# 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>
Assicurati che ~/.bash_profile non abbia alcuna PS1 affinché quanto sopra funzioni correttamente.
/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>
Se ti piace questo articolo, aggiungilo ai preferiti su del.icio.us e Inciampalo .