Tornar $ JAVA_HOME facilmente alterável no Ubuntu [fechado]


139

No Ubuntu, gostaria de alternar minha variável de ambiente JAVA_HOME entre os Java 5 e 6.

Abro um terminal e digito o seguinte para definir a variável de ambiente JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

E nessa mesma janela do terminal, digite o seguinte para verificar se a variável de ambiente foi atualizada:

echo $JAVA_HOME

E vejo /usr/lib/jvm/java-1.5.0-sun, que é o que espero ver. Além disso, modifico ~ / .profile e defino a variável de ambiente JAVA_HOME como /usr/lib/jvm/java-1.5.0-sun.

E agora, para o problema - quando abro uma nova janela de terminal e verifico minha variável de ambiente JAVA_HOME digitando echo $ JAVA_HOME Eu vejo que minha variável de ambiente JAVA_HOME foi revertida para o Java 6. Quando reinicializo minha máquina (ou log dentro e fora, suponho) que a variável de ambiente JAVA_HOME esteja definida como Java 5 (presumivelmente por causa da modificação que fiz no meu ~ / .profile).

Existe uma maneira de contornar isso para que eu possa alterar meu ambiente JAVA_HOME sem precisar fazer logoff e logon novamente (E fazer com que essa alteração de variável de ambiente permaneça em todas as novas janelas de terminal)?


29
Qual é o site correto e a resposta duplicada?
Martin Konicek

O ~/.profilearquivo é lido apenas quando você faz logon no Ubuntu; portanto, se você fizer logout / logon, o JAVA_HOME será definido para todos os terminais e quaisquer outros aplicativos executados. Se você definir JAVA_HOME, ~/.bashrcele será visto apenas por aplicativos executados no terminal.
Jr0cket

Respostas:


196

Coloque as variáveis ​​de ambiente no /etc/environmentarquivo global :

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Execute "source / etc / environment" em cada shell em que você deseja que as variáveis ​​sejam atualizadas:

$ source /etc/environment

Verifique se funciona:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Ótimo, não é necessário fazer logout.

Se você deseja definir a variável de ambiente JAVA_HOME apenas no terminal, defina-a no arquivo ~ / .bashrc .


9
Um reinício ainda é necessária para que essas alterações afetam aplicativos lançados através da interface do usuário Ubuntu (ou seja, um duplo clique um app)
Eric Hu

7
Como isso é diferente do que apenas definir a variável em todos os friggin 'shell?
mlissner

1
outra maneira de não precisar executá-lo manualmente toda vez é modificar o arquivo .bashrc para incluir o comando "source / etc / environment"
nityan

1
@MartinKonicek seu exemplo está incorreto. não deve haver 'exportação' nessa linha. / etc / ambiente contém pares de valores-chave
pdeva

1
tenha em mente que /etc/environmenté especial e não permite a substituição de variáveis, por exemplo JRE_HOME=${JAVA_HOME}/jre, não funcionará.
Abdull

31

Isso provavelmente resolverá seu problema: https://help.ubuntu.com/community/EnvironmentVariables

Variáveis ​​de ambiente para toda a sessão

Para definir variáveis ​​de ambiente de maneira que afete o ambiente de um usuário em particular, não se deve colocar comandos para definir seus valores em arquivos de script de shell específicos no diretório inicial do usuário, mas use:

~ / .pam_environment - Este arquivo é especificamente destinado à configuração do ambiente de um usuário. Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha.

Não recomendado:

~ / .profile - Este é provavelmente o melhor arquivo para colocar atribuições de variáveis ​​de ambiente, uma vez que é executado automaticamente pelo DisplayManager durante a sessão da área de trabalho do processo de inicialização, bem como pelo shell de login quando um faz login no console de texto.


No link que você forneceu: "As opções abaixo não são recomendadas, mas a solução anterior (?) Fornecida nesta página não funcionou com a versão 10.04 para desktop. .Pam_environment não é processada naturalmente com a distribuição."
Calmarius

14
~ / .pam_environment é uma maneira incrível de bloquear seu login se você assumir que ele processa variáveis. Tentei definir PATH para $ {PATH}: $ {HOME} / bin e ele falhou ao avaliar as variáveis. Resultado líquido: não é possível efetuar login :( Corrigido visitando Ctrl-Alt-1 e executando "/ bin / rm ~ / .pam_environment". Seja extremamente cuidadoso ou use uma conta secundária para testar as configurações aqui.
Alain O'Dea

6
Pessoalmente, não sei por que eles se incomodaram em criar o arquivo de ambiente e, em seguida, o fizeram funcionar de uma maneira completamente diferente de qualquer outro mecanismo para definir variáveis ​​de ambiente já funcionadas antes. Pares simples de valores-chave, como o arquivo de ambiente usa, são simples BS. Há uma razão pela qual usamos variáveis ​​e links no ambiente e ele ainda tem mérito hoje. Simplifica a administração. Quem quer que sejam os bozos que decidiram que a maneira do PAM de fazer as coisas neste arquivo era a melhor é imbecil. Variáveis ​​precisam ser interpretadas.
Bill Rosmus

1
@ AlainO'Dea: Eu tive exatamente o mesmo problema. Chocado e preocupado quando não consegui passar da tela de login. Após algumas pesquisas, descobri que você pode usar variáveis, mas precisa usar uma sintaxe diferente. por exemplo. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Quando não está usando uma variável, uma tarefa simples parece funcionar.
tim_wonil

Sim, concordo com @ AlainO'Dea. Se houver algum erro no seu script, você não poderá fazer login. Cuidar.
Evan Hu

13

Tente estas etapas.

--Vamos editar "etc \ profile". As variáveis ​​de ambiente devem ser inseridas na parte inferior do arquivo. Como o Ubuntu não dá acesso à pasta raiz, teremos que usar alguns comandos no terminal

Passo 1: Inicie o Terminal. Digite o comando:gksudo gedit /etc/profile

Etapa 2: O arquivo de texto do perfil será aberto. Insira as variáveis ​​de ambiente na parte inferior da página ........... Por exemplo: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

passo 3: salve e feche o arquivo. Verifique se as variáveis ​​de ambiente estão definidas usando o comando echo ........ Ex. echo $PATH


9

Você precisa colocar a definição de variável no ~/.bashrcarquivo.

Na página de manual do bash:

Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de /etc/bash.bashrc e ~ / .bashrc, se esses arquivos existirem.


5

Tradicionalmente, se você deseja alterar a variável nas janelas do terminal, defina-a no .bashrcarquivo, que é originado cada vez que um novo terminal é aberto. .profileO arquivo não é originado sempre que você abre um novo terminal.

Veja a diferença entre .profile e .bashrc em questão: qual é a diferença entre .bashrc, .bash_profile e .environment?

.bashrcdeve resolver seu problema. No entanto, não é a solução adequada, pois você está usando o Ubuntu. Veja a página de ajuda relevante do Ubuntu " Variáveis ​​de ambiente para toda a sessão ". Portanto, não é de admirar que .profileisso não funcione para você. Eu uso o Ubuntu 12.04 e xfce. Eu configurei o meu .profilee ele simplesmente não está entrando em vigor mesmo se eu sair e entrar. Experiência semelhante aqui . Então você pode ter que usar .pam_environmentarquivo e esquecer totalmente .profile, e .bashrc. E NOTE que .pam_environmentnão é um arquivo de script.




1

Depois de fazer alterações no .profile, é necessário executar o arquivo para que as alterações entrem em vigor.

root@masternode# . ~/.profile

Feito isso, o comando echo funcionará.


Você deve usar em ~/.profilevez de ./.profile.
Alexis Wilke
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.