Minha distribuição Linux é Debian 12.7.0, 64 bits, inglês.
Modifiquei o guia intitulado Como instalar o Java JDK 21 ou OpenJDK 21 no Debian 12 para que eu pudesse "instalar"/usar a versão mais recente pronta para produção do OpenJDK 23.0.1 (para sua informação, os repositórios oficiais do Debian contêm o OpenJDK 17, que está desatualizado para meu uso).
Cliquei no link https://download.java.net/java/GA/jdk23.0.1/c28985cbf10d4e648e4004050f8781aa/11/GPL/openjdk-23.0.1_linux-x64_bin.tar.gz para baixar o software para o meu computador.
Em seguida, extraí o arquivo compactado usando o comando abaixo:
tar xvf openjdk-23.0.1_linux-x64_bin.tar.gz
Um novo diretório foi criado no meu dispositivo. Ele é chamado jdk-23.0.1
Copiei o diretório para /usr/local
sudo cp -r jdk-23.0.1 /usr/local
Criei um novo script de origem para definir o ambiente Java emitindo o seguinte comando:
su -i
tee -a /etc/profile.d/jdk23.0.1.sh<<EOF
> export JAVA_HOME=/usr/local/jdk-23.0.1
> export PATH=$PATH:$JAVA_HOME/bin
> EOF
Depois de fazer o acima, abri jdk23.0.1.sh usando FeatherPad e o conteúdo mostrou o seguinte:
export JAVA_HOME=/usr/local/jdk-23.0.1
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin
Com base no guia, digitei o seguinte comando:
source /etc/profile.d/jdk23.0.1.sh
Para verificar a versão do OpenJDK no meu computador, digitei:
java --version
Apareceu uma mensagem de erro:
bash: java: command not found
Alguém poderia me mostrar o que eu fiz de errado, por favor? Obrigado.
PS: Segui o guia à risca e mesmo assim apareceu a mensagem de erro.
Editado para corrigir o erro de digitação. A declaração correta deve ser a seguinte:
exportar JAVA_HOME=/usr/local/jdk-23.0.1
Se você executar:
O script de shell, como você mencionou, conteria:
o que é obviamente errado porque você realmente quer que a segunda linha seja:
para que as variáveis sejam expandidas à medida que o script é originado e, depois disso , o valor da variável de ambiente
PATH
(não o conteúdo do script) se tornará (observe os últimos bits):se o valor (daquele do respectivo shell) fosse:
antes de obter o script .
O motivo de você ter conteúdo "inesperado" no script produzido é que, sem citar o primeiro
EOF
ao executar otee
comando, o shell onde você o executa expandirá as variáveis no heredoc.E como
$JAVA_HOME
não foi definido no shell onde/quando você executa o comando (o heredoc é uma entrada paratee
; ele não será obtido "on the fly" enquanto você o estiver alimentando paratee
; nem será obtido automaticamente depois disso), quando a variável foi expandida pelo shell ( antes de alimentar o heredoc paratee
), ela é expandida para uma "string vazia" em vez de/usr/local/jdk-23.0.1
. É por isso que você obtém (um segundo):/bin
no final da segunda linha.Para suprimir a expansão, você deve executar:
em vez de.
Observe também que os scripts em
/etc/profile.d/
normalmente serão originados por qualquer (novo) shell de "login" (aqui significa apenas, por exemplo,bash
iniciado com-l
), e geralmente mesmo quando os shells anexados a um emulador de terminal podem ser "não-login", eles ainda herdarão o ambiente de uma forma ou de outra de algum processo/shell que originou os scripts lá. Então, após um novo login, você não deve precisar originar manualmente o script recém-criado (de novo).Observe também que
PATH
"component" próximo ao final terá precedência menor, o que significa que com:$JAVA_HOME/bin
anexado aPATH
, se você instalar algum outro pacote jdk / mais antigo com o gerenciador de pacotes do sistema, ele será usado em vez deste jdk que você tem em/usr/local/
. Então, dependendo do que você quer, você pode querer acrescentar antes.Além disso, se o pacote jdk do sistema enviar um script semelhante, você precisará garantir que seu script tenha um nome de arquivo que seja ordenado lexicamente posteriormente (o que pode variar dependendo do local atual, eu acho), para que ele seja obtido posteriormente .