Sto usando Linux Mint. La mia shell di accesso (cat /etc/passwd | grep myUserName
) è bash.
Dopo aver avviato il mio ambiente desktop grafico ed eseguito un emulatore di terminale da esso, posso vedere che .bash_profile
non è di origine (vars di ambiente che sono export
ed in esso non sono impostati). Ma se accedo da una console di testo (ctrl +alt +F1 ) o eseguire manualmente bash -l
dall'emulatore di terminale, .bash_profile
funziona bene.
Mi sbaglio quando penso che .bash_profile
dovrebbe essere originato all'avvio di X e tutte le export
'ed vars dovrebbe essere disponibile nel terminale, in esecuzione da X?
PS Mettere tutto in .bashrc
e reperirlo da .bash_profile
non è una buona idea (https://stackoverflow.com/questions/902946/):il materiale ambientale dovrebbe essere reperito solo una volta.
Risposta accettata:
Il file ~/.bash_profile
viene letto da bash quando è una shell di accesso. Questo è ciò che ottieni quando accedi in modalità testo.
Quando accedi sotto X, gli script di avvio vengono eseguiti da /bin/sh
. Su Ubuntu e Mint, /bin/sh
è dash, non bash. Dash e bash hanno entrambi le stesse funzionalità di base, ma dash si attiene a queste funzionalità di base per essere veloce e piccolo, mentre bash aggiunge molte funzionalità a costo di richiedere più risorse. È comune utilizzare dash per gli script che non richiedono le funzionalità extra e bash per l'uso interattivo (sebbene zsh abbia molte funzionalità più interessanti).
La maggior parte delle combinazioni di display manager (il programma in cui si digita il nome utente e la password) e l'ambiente desktop legge ~/.profile
dagli script di accesso in /etc/X11/Xsession
, /usr/bin/lightdm-session
, /etc/gdm/Xsession
o qualunque sia applicabile. Quindi inserisci le definizioni delle variabili di ambiente in ~/.profile
. Assicurati di utilizzare solo la sintassi supportata da dash.
Allora cosa dovresti mettere dove?
-
Un buon
.bash_profile
carica.profile
e carica.bashrc
se la shell è interattiva.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
-
In
.profile
, inserisci le definizioni delle variabili di ambiente e altre impostazioni di sessione comeulimit
. - In
.bashrc
, inserisci le impostazioni interattive di bash come alias, funzioni, completamento, associazioni di tasti (che non sono in.inputrc
), …