Tengo una variable de entorno para LANG configurada en ~ / .profile pero no se establece

Quiero establecer la configuration regional.

Tengo esto en mi ~ / .profile

#language export LANG=en_GB.utf8 export TESTING123=en_GB.utf8 

Pero cuando escribo:

 echo $LANG $TESTING123 

Me sale (LANG no está configurado, pero TESTING123 está configurado)

 en_US.utf8 en_GB.utf8 

Si export LANG=en_GB.utf8 directamente en el shell, todo funciona

 #export LANG=en_GB.utf8 #echo $LANG en_GB.utf8 #locale LANG=en_GB.utf8 LANGUAGE= LC_CTYPE="en_GB.utf8" LC_NUMERIC="en_GB.utf8" LC_TIME="en_GB.utf8" LC_COLLATE="en_GB.utf8" LC_MONETARY="en_GB.utf8" LC_MESSAGES="en_GB.utf8" LC_PAPER="en_GB.utf8" LC_NAME="en_GB.utf8" LC_ADDRESS="en_GB.utf8" LC_TELEPHONE="en_GB.utf8" LC_MEASUREMENT="en_GB.utf8" LC_IDENTIFICATION="en_GB.utf8" LC_ALL= 

el sistema es Debian 7.2, shell es bash.

Hay muchos otros files de initialization donde las variables pueden establecerse después de aplicar su .profile como .bash_profile .bashrc … etc, o simplemente otro file no estándar llamado desde .profile . Le sugiero primero que busque cada ocurrencias de sus variables en su directory de inicio:

 grep "LANG=" .* 

Pasé por alto y pensé que esto finalmente porque me estaba volviendo loco tener que hacerlo manualmente, no parecía correcto. En debian esto se puede hacer con la utilidad update-locale

 update-locale --reset 

hará que se ignore el file /etc/default/locale (simplemente comenta la variable LANG ); lo que resulta en una locale de:

 LANG=C LANGUAGE= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_PAPER="C" LC_NAME="C" LC_ADDRESS="C" LC_TELEPHONE="C" LC_MEASUREMENT="C" LC_IDENTIFICATION="C" LC_ALL=C update-locale LANG=en_US.UTF-8 

configurará su LANG a … lo adivinó en_US.UTF-8 dando como resultado la generación de la locale :

 LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= 

Y finalmente solo para cubrir todas mis bases …

 update-locale LANG=C 

configurará su LANG a C dando como resultado la salida de la locale :

 LANG=C LANGUAGE= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_PAPER="C" LC_NAME="C" LC_ADDRESS="C" LC_TELEPHONE="C" LC_MEASUREMENT="C" LC_IDENTIFICATION="C" LC_ALL= 

¡Espero que esto ayude! -Eric

En Debian, configura las configuraciones regionales con el siguiente command:

 # dpkg-reconfigure locales 

Creará el /etc/default/locale y agregará solo la variable LANG a él. Si desea personalizar todas las variables LC_* , puede agregarlas allí también:

 LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE=en_US.UTF-8 LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE=C LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C LC_PAPER=en_US.UTF-8 LC_NAME=en_US.UTF-8 LC_ADDRESS=en_US.UTF-8 LC_TELEPHONE=en_US.UTF-8 LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 LC_ALL= 

Compruebe si tiene ~/.bash_profile o ~/.bash_login ; ~/.profile .

De man bash :

Cuando bash se invoca como un shell de inicio de session interactivo o como un shell no interactivo con la opción –login, primero lee y ejecuta commands desde el file /etc/profile , si ese file existe. Después de leer ese file, busca ~/.bash_profile , ~/.bash_login , y ~/.profile , en ese order, y lee y ejecuta commands del primero que existe y que es legible.

"Como un shell de inicio de session interactivo" es importante, porque las shells interactivas a menudo no son shells de inicio de session. Si simplemente cambia uno de esos files y arranca un nuevo terminal GUI, por ejemplo, no se aplicará. Solo se lee cuando realmente inicias session.


Otra posibilidad es que su LANG sea restablecida posteriormente por el sistema bashrc ancho; compruebe si alguno proviene de ~/.bashrc , por ejemplo,

 grep LANG /etc/bashrc