LANG é sempre local, ignora ~ / .profile

2

No meu ~/.profile , tenho:

export LANG=C.UTF-8

Acho que foi o padrão do Ubuntu.

No entanto, quando inicio um shell (por exemplo, Konsole), recebo:

gz@gcomputer:~$ echo $LANG
de_DE.UTF-8

Mesmo quando eu altero meu ~/.profile para export LANG=en_US.UTF-8 , não consigo fazer a diferença.

Por quê? Como posso consertar isso?

    
por Albert 30.07.2016 / 19:04

2 respostas

4

De acordo com esta resposta Você deve alterar as configurações de idioma em etc/default/locale e ~/.pam_environment , não em ~/.profile

etc/default/locale é gerado por update-locale , portanto, faça isso para definir LANG=en_GB.UTF-8 (o arquivo também define LANGUAGE)

update-locale LANG=en_GB.UTF-8

Em ~ / .pam_environment as configurações de idioma são as mesmas que em /etc/default/locale :

LANGUAGE=en_GB:en
LANG=en_GB.UTF-8

e pode ser editado conforme desejado. Você precisa fazer logout e voltar ou usar source :

Em geral, você precisa fazer logout e logar novamente para que as alterações feitas em ~/.profile entrem em vigor.

No entanto, você pode torná-los instantâneos usando source

source ~/.profile

Exemplo:

Edite meu ~ / .profile para incluir:

export foo=bar

salve e saia ...

em um novo shell:

$ echo $foo

(nada)

$ source ~/.profile
$ echo $foo
bar

Se nada mudou após sair e voltar, verifique se ~/.bash_profile e ~/.bash_login não existem (porque, como mencionado por @ByteCommander, se eles existem, ~/.profile não é originado)

Se algum deles existir, provavelmente o melhor a fazer é copiar todos os comandos deles para o seu ~/.profile e renomeá-los como ~/.bash_profile_old e ~/.bash_login_old , para que ~/.profile seja originado (e você não dependendo de bash ser seu shell)

Se nenhum deles existir, pode ser que ~/.profile ainda não tenha sido adquirido por algum motivo:

Veja a resposta de Eliah Kagan aqui para mais detalhes

A solução sugerida é usar ... ~/.pam_environment

    
por Zanna 30.07.2016 / 19:14
1

Por razões muito tediosas para entrar aqui, o bash tem vários arquivos de configuração por usuário. Os dois mais importantes são .profile e .bashrc . O Bash lê um ou outro deles em todas as startups, mas não em ambos, dependendo das condições que são muito confusas para eu me incomodar em lembrar.

O que eu faço é colocar tudo significativo em .profile , além de uma leitura de linha extra

profile_loaded=t

e, em seguida, tenho um .bashrc que consiste apenas em

if test -z "$profile_loaded"; then
    . ~/.profile
fi

Se você adotar essa abordagem, é importante certificar-se de que tudo que o .profile faz é idempotente , o que é uma palavra chique para "fazer isso mais de uma vez é o mesmo que fazê-lo Uma maneira fácil de conseguir isso é envolver todo o conteúdo de .profile em uma condicional semelhante:

if test -z "$profile_loaded"; then

    # ... all the actual work goes here ...

    profile_loaded=t
fi

(Se você tiver arquivos com o nome .bash_profile ou .bash_login , isso confunde ainda mais o problema: eu recomendo strongmente copiar o conteúdo deles em .profile , excluí-los e limpar qualquer duplicação em .profile .)

    
por zwol 30.07.2016 / 23:27