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_profilecarica.profilee carica.bashrcse 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), …