Questa è una decisione a monte proveniente da Debian. La logica di ciò è spiegata in questo bellissimo post del wiki , di cui il seguente è un estratto. Il riepilogo esecutivo è "per garantire che gli accessi GUI e non GUI funzionino allo stesso modo":
Prendiamo xdm come esempio. un giorno pierre torna dalle vacanze e scopre che il suo amministratore di sistema ha installato xdm sul sistema Debian. Si collega bene e xdm legge il suo file .xsession ed esegue fluxbox. Tutto sembra andare bene fino a quando non riceve un messaggio di errore nella locale errata! Poiché sostituisce la variabile LANG nel suo .bash_profile e poiché xdm non legge mai .bash_profile, la sua variabile LANG è ora impostata su en_US anziché fr_CA.
Ora, la soluzione ingenua a questo problema è che invece di avviare "xterm", potrebbe configurare il suo gestore di finestre per avviare "xterm -ls". Questo flag dice a xterm che invece di lanciare una shell normale, dovrebbe lanciare una shell di login. Con questa configurazione, xterm genera / bin / bash ma inserisce "- / bin / bash" (o forse "-bash") nel vettore argomento, quindi bash si comporta come una shell di login. Ciò significa che ogni volta che apre un nuovo xterm, leggerà / etc / profile e .bash_profile (comportamento bash incorporato), e poi .bashrc (perché .bash_profile dice di farlo). All'inizio può sembrare che funzioni bene - i suoi file dot non sono pesanti, quindi non si accorge nemmeno del ritardo - ma c'è un problema più sottile. Avvia anche un browser web direttamente dal suo menu Fluxbox, e il browser Web eredita la variabile LANG da fluxbox, che ora è impostata sulla locale errata. Quindi, anche se i suoi xterm potrebbero andare bene, e qualsiasi cosa lanciata dai suoi xterm potrebbe andare bene, il suo browser gli sta ancora dando pagine con impostazioni internazionali errate.
Quindi, qual è la migliore soluzione a questo problema? Non ce n'è davvero uno universale. Un approccio migliore è modificare il file .xsession in modo che assomigli a questo:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Questo fa sì che la shell che interpreta lo script .xsession legga in / etc / profile e .bash_profile se esistono e sono leggibili, prima di eseguire xmodmap o xterm o "eseguire" il gestore di finestre. Tuttavia, c'è un potenziale svantaggio di questo approccio: in xdm, la shell che legge .xsession funziona senza un terminale di controllo. Se / etc / profile o .bash_profile utilizzano comandi che presuppongono la presenza di un terminale (come "fortuna" o "stty"), tali comandi potrebbero non riuscire. Questo è il motivo principale per cui xdm non legge quei file per impostazione predefinita. Se stai per utilizzare questo approccio, devi assicurarti che tutti i comandi nei tuoi "file dot" siano sicuri quando non ci sono terminali.
-n "$BASH_VERSION"
vero al di fuori di bash?