Sì, questo è il comportamento previsto.
Il comportamento, in breve, è il seguente:
- bash è iniziato come una shell di login interattiva: legge
~/.profile
- bash è iniziato come una shell interattiva senza accesso: legge
~/.bashrc
Leggi il manuale di bash sui file di avvio per maggiori dettagli.
Personalmente, penso che questo comportamento sia strano e non ho ancora trovato una razionalizzazione per questa decisione progettuale.
Qualche spiegazione della terminologia:
- Una shell interattiva è una shell con cui è possibile interagire, il che significa che è possibile digitare comandi in essa. La maggior parte delle shell che userete sono shell interattive.
- Una shell non interattiva è una shell con la quale non è possibile interagire. Gli script di shell vengono eseguiti all'interno di shell non interattive.
- Una shell di accesso è la shell che viene avviata quando si accede al sistema.
- Una shell non di accesso è una shell che viene avviata dopo il processo di accesso.
La maggior parte delle shell che vedi sono shell interattive senza accesso . Ciò è particolarmente vero se si esegue un ambiente grafico come gnome, perché allora gnome è la "shell di accesso". Qualsiasi sessione bash avviata all'interno di gnome è una shell non di accesso. Se vuoi vedere una vera shell di login interattiva, vai su una console virtuale (usando Ctrl+Alt+F1
) e poi accedi usando il tuo nome utente e password. Questa è una vera shell bash di login interattiva. Puoi tornare alla shell grafica usando Ctrl+Alt+F7
.
C'è un'opzione --login
che farà in modo che bash si comporti come se fosse una shell di login anche se avviata dopo aver effettuato l'accesso. Configurare gnome-terminal per avviare bash come shell di login significa che avvierà bash usando l' --login
opzione.
Di solito vuoi che bash legga sempre ~/.bashrc
in una shell interattiva. Ecco come ti consiglio di farlo:
Crea un ~/.bash_profile
file. Se bash è iniziato come una shell di login cercherà prima di ~/.bash_profile
prima di cercare ~/.profile
. Se bash trova, ~/.bash_profile
allora non leggerà ~/.profile
.
Inserisci le seguenti righe ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Ora se bash viene avviato come shell di login interattiva leggerà i seguenti file:
~/.bash_profile
~/.profile
~/.bashrc
e se bash viene avviato come shell interattiva non di accesso:
~/.bashrc
Dovresti mettere cose che sono specifiche di bash ~/.bashrc
e cose che non sono specifiche di bash ~/.profile
. Ad esempio PATH
entra ~/.profile
e HISTCONTROL
entra ~/.bashrc
.
Nota che ~/.profile
non è specifico per Bash. Leggono anche altre shell basate su testo (ad esempio sh o ksh) e shell grafiche (gnome) ~/.profile
. Questo è il motivo per cui non dovresti mettere cose specifiche bash ~/.profile
.