Soluzione 1:
.bash_profile
e .bashrc
sono specifici di bash
, mentre .profile
viene letto da molte shell in assenza dei propri file di configurazione specifici della shell. (.profile
era usato dalla shell Bourne originale.) .bash_profile
o .profile
viene letto dalle shell di login, insieme a .bashrc
; le subshell leggono solo .bashrc
. (Tra il controllo del lavoro e i moderni sistemi a finestre, .bashrc
di per sé non si usa molto. Se usi screen
o tmux
, schermate/finestre di solito eseguono subshell invece di shell di login.)
L'idea alla base di questo era che la configurazione una tantum fosse eseguita da .profile
(o la sua versione specifica della shell) e roba per shell di .bashrc
. Ad esempio, generalmente vuoi caricare le variabili d'ambiente solo una volta per sessione invece di farle colpire ogni volta che avvii una subshell all'interno di una sessione, mentre vuoi sempre i tuoi alias (che non vengono propagati automaticamente come lo sono le variabili d'ambiente).
Altri importanti file di configurazione della shell:
/etc/bash_profile
(riserva /etc/profile
) viene letto prima del .profile
dell'utente per la configurazione a livello di sistema, e allo stesso modo /etc/bashrc
nelle subshell (nessun fallback per questo). Molti sistemi, incluso Ubuntu, usano anche un /etc/profile.d
directory contenente gli scriptlet della shell, che sono .
(source
)-ed da /etc/profile
; i frammenti qui sono per shell, con *.sh
applicabile a tutte le shell compatibili con Bourne/POSIX e altre estensioni applicabili a quella particolare shell.
Soluzione 2:
.profilo
.profile
è per cose che non sono specificamente correlate a Bash
, come le variabili d'ambiente PATH
e amici e dovrebbe essere disponibile in qualsiasi momento.
Ad esempio, .profile
dovrebbe essere caricato anche all'avvio di una sessione di desktop grafico.
.bashrc
.bashrc
serve per configurare l'uso interattivo di Bash, come Bash aliases
, impostando il tuo editor
preferito , impostando il Bash prompt
, ecc.
.bash_profile
.bash_profile serve per assicurarsi che entrambe le cose in .profile
e .bashrc
vengono caricati per login shells
.
Ad esempio, .bash_profile
potrebbe essere qualcosa di semplice come
. ~/.profile
. ~/.bashrc
Se dovessi omettere .bashrc
, solo .profile
verrebbe caricato.
Soluzione 3:
Secondo la pagina man di bash, .bash_profile
viene eseguito per le shell di login, mentre .bashrc
viene eseguito per shell interattive non di login.
Quindi, cos'è una shell di accesso o non di accesso?
Quando accedi (digita nome utente e password) tramite console, seduto alla macchina o in remoto tramite ssh:.bash_profile
viene eseguito per configurare la tua shell prima del prompt dei comandi iniziale. Ma, se hai già effettuato l'accesso alla tua macchina e aperto una nuova finestra di terminale (xterm) all'interno di Gnome o KDE, allora .bashrc
viene eseguito prima del prompt dei comandi della finestra. .bashrc
viene eseguito anche quando avvii una nuova istanza bash digitando /bin/bash
in un terminale.
Un'eccezione alle linee guida della finestra del terminale è Terminal.app di Mac OS X, che esegue una shell di login per impostazione predefinita per ogni nuova finestra del terminale, chiamando .bash_profile
invece di .bashrc
. Altri emulatori di terminale GUI possono fare lo stesso, ma la maggior parte tende a non farlo.
Altro qui.