Esta es una decisión previa proveniente de Debian. La razón para ello se explica en esta muy bonita publicación wiki , de la cual lo siguiente es un extracto. El resumen ejecutivo es "para garantizar que los inicios de sesión GUI y no GUI funcionen de la misma manera":
Tomemos xdm como ejemplo. Pierre regresa de vacaciones un día y descubre que su administrador del sistema ha instalado xdm en el sistema Debian. Inicia sesión muy bien, y xdm lee su archivo .xsession y ejecuta fluxbox. ¡Todo parece estar bien hasta que recibe un mensaje de error en la ubicación incorrecta! Como anula la variable LANG en su .bash_profile, y dado que xdm nunca lee .bash_profile, su variable LANG ahora está establecida en en_US en lugar de fr_CA.
Ahora, la solución ingenua a este problema es que en lugar de iniciar "xterm", podría configurar su administrador de ventanas para iniciar "xterm -ls". Este indicador le dice a xterm que, en lugar de iniciar un shell normal, debería iniciar un shell de inicio de sesión. Bajo esta configuración, xterm genera / bin / bash pero pone "- / bin / bash" (o tal vez "-bash") en el vector de argumento, por lo que bash actúa como un shell de inicio de sesión. Esto significa que cada vez que abre un nuevo xterm, leerá / etc / profile y .bash_profile (comportamiento de bash incorporado), y luego .bashrc (porque .bash_profile dice hacer eso). Puede parecer que esto funciona bien al principio: sus archivos de puntos no son pesados, por lo que ni siquiera nota el retraso, pero hay un problema más sutil. También lanza un navegador web directamente desde su menú de fluxbox, y el navegador web hereda la variable LANG de fluxbox, que ahora está configurada en la configuración regional incorrecta. Entonces, aunque sus xterms pueden estar bien, y cualquier cosa lanzada desde sus xterms puede estar bien, su navegador web todavía le está dando páginas en la ubicación incorrecta.
Entonces, ¿cuál es la mejor solución para este problema? Realmente no hay uno universal. Un mejor enfoque es modificar el archivo .xsession para que se vea así:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Esto hace que el shell que interpreta el script .xsession lea en / etc / profile y .bash_profile si existen y son legibles, antes de ejecutar xmodmap o xterm o "ejecutar" el administrador de ventanas. Sin embargo, hay un inconveniente potencial para este enfoque: bajo xdm, el shell que lee .xsession se ejecuta sin un terminal de control. Si / etc / profile o .bash_profile usa algún comando que asume la presencia de un terminal (como "fortune" o "stty"), esos comandos pueden fallar. Esta es la razón principal por la cual xdm no lee esos archivos por defecto. Si va a utilizar este enfoque, debe asegurarse de que todos los comandos en sus "archivos de puntos" sean seguros de ejecutar cuando no haya terminal.
-n "$BASH_VERSION"
cierto fuera de bash?