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)?

Junho Park
fonte
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 .

Martin Konicek
fonte
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.

Holger Frohloff
fonte
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

Alex
fonte
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.

Paweł Nadolski
fonte
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.

HongboZhu
fonte
1

Dê uma olhada bash(1), você precisa de um shell de login para pegar a ~/.profile, ou seja, a -lopção.

Nikolai Fetissov
fonte
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á.

CodeShane
fonte
Você deve usar em ~/.profilevez de ./.profile.
Alexis Wilke