Eu tenho uma variável de ambiente para LANG definida em ~ / .profile, mas ela não está sendo definida

7

Eu quero definir a localidade.

Eu tenho isso no meu ~ / .profile

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

Mas quando eu digito:

echo $LANG $TESTING123

Eu recebo (LANG não definido, mas TESTING123 está definido)

en_US.utf8 en_GB.utf8

Se eu faço export LANG=en_GB.utf8 diretamente no shell, tudo 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=

o sistema é Debian 7.2, o shell é o bash.

    
por ctrl-alt-delor 08.01.2014 / 17:35

4 respostas

7

Existem muitos outros arquivos de inicialização nos quais as variáveis podem ser definidas após a aplicação de .profile , como .bash_profile .bashrc ... etc, ou simplesmente outro arquivo não padrão chamado .profile . Sugiro que você primeiro procure todas as ocorrências de suas variáveis em seu diretório pessoal:

grep "LANG=" .* 
    
por 08.01.2014 / 18:45
3

Passou e entendeu que, finalmente, porque estava me deixando louco ter que fazer isso manualmente, não parecia certo. No debian isso pode ser feito com o utilitário update-locale

update-locale --reset

fará com que o arquivo /etc/default/locale seja ignorado (simplesmente comenta a variável LANG ); resultando em 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

definirá seu LANG para ... você adivinhou en_US.UTF-8 resultando em locale gerando:

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=

E finalmente só para cobrir todas as minhas bases ...

update-locale LANG=C

definirá seu LANG para C resultando em locale outputting:

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 isso ajude! -Eric

    
por 09.09.2015 / 16:58
2

Verifique se você tem um ~/.bash_profile ou ~/.bash_login ; eles substituirão ~/.profile .

De man bash :

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.

"Como um shell login interativo" é significativo, porque os shells interativos geralmente não são shells de login. Se você acabou de alterar um desses arquivos e iniciar um novo terminal GUI, por exemplo, ele não será aplicado. Só é lido quando você efetua login.

Outra possibilidade é que seu LANG esteja sendo redefinido posteriormente pelo sistema em todo o sistema bashrc ; verifique se um deles é originado em ~/.bashrc e, por exemplo,

grep LANG /etc/bashrc
    
por 08.01.2014 / 18:02
2

No debian, você configura os códigos de idioma usando o seguinte comando:

# dpkg-reconfigure locales

Ele criará o arquivo /etc/default/locale e adicionará apenas a variável LANG a ele. Se você quiser personalizar todas as variáveis LC_* , também poderá adicioná-las:

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=
    
por 09.01.2014 / 07:40