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 .