업데이트 대안을 사용하여 JAVA_HOME 및 PATH 설정

업데이트 대안을 사용하여 JAVA_HOME 및 PATH 설정

편집하다

질문은 bash 스크립팅 및 Java 환경에 관한 것입니다. 인내심을 갖고 시간을 내어 답변해 주신 분들께 감사드립니다. 나는 감사합니다.

Java 환경에서는 sdkman을 사용하기 시작했습니다. 사실 저는 이 작은 스크립트를 시작할 때 비슷한 것을 찾고 있었고 비슷한 것을 하려고 생각하고 있었습니다. 내 질문에 대한 답을 찾고 있는 모든 사람에게 이 도구를 추천합니다. 자신만의 스크립트가 있는지는 중요하지 않습니다. 한 번 시도해 보시기를 적극 권장합니다.

sdkman은 언어 버전 설치, 측면 요구사항(예: maven, gradle 및 kotlin) 및 환경 변수를 처리합니다.

https://sdkman.io/


원래 질문

활성 Java 버전을 고려하여 사용자의 JAVA_HOME 및 PATH를 자동으로 설정하는 bash 스크립트를 작성 중이지만 어떤 이유로 PATH가 올바르게 빌드되지 않고 ":" 대신 공백이 추가됩니다. 이유를 알 수 있는 사람이 있습니까?

아래는 스크립트입니다.

감사해요!

#!/bin/bash

export JAVA_HOME=$(dirname $(dirname `readlink -f /etc/alternatives/java`))

IFS=':';
for i in $PATH;
do
        JAVA1=$i/bin/java
        JAVA2=$i/java
        if [ -d "$i" ];
        then
                if [ ! -L "$JAVA1" ] && [ -x "$JAVA1" ] || [ ! -L "$JAVA2" ] && [ -x "$JAVA2" ];
                then
                        echo "dropping path: $i";
                else
                        NEW=$NEW:$i
                fi
        fi
done
PATH=$NEW:$JAVA_HOME/bin
echo 
echo "Final:"
echo $PATH

예제 출력:

$ ./java_home_setter.sh 
dropping path: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin

Final:
 /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin /usr/lib/jvm/java-8-openjdk-amd64/bin

답변1

이는 ':'을 사용하도록 IFS 변수를 변경했기 때문입니다.

따라서 출력될 때 변수는 ":"가 입력 필드 구분 기호라고 생각하여 기본 출력 필드 구분 기호인 "공백"으로 대체됩니다.

당신은 가져갔습니다지원IFS를 사용하기 전에 다음과 같습니다.

OIFS=$IFS
IFS=':';

뒤쪽에'for' 루프가 완료되었습니다., 복원하려면 다음 단계를 따르세요.

IFS=$OIFS

경로로 시작하지 않는 ":"도 삭제하세요.

PATH=${PATH#:*}    

스크립트는 다음과 같아야 합니다.

#!/bin/bash

export JAVA_HOME=$(dirname $(dirname `readlink -f /etc/alternatives/java`))

OIFS=$IFS
IFS=':';
for i in $PATH;
do
        JAVA1=$i/bin/java
        JAVA2=$i/java
        if [ -d "$i" ];
        then
                if [ ! -L "$JAVA1" ] && [ -x "$JAVA1" ] || [ ! -L "$JAVA2" ] && [ -x "$JAVA2" ];
                then
                        echo "dropping path: $i";
                else
                        NEW=$NEW:$i
                fi
        fi
done
IFS=$OIFS
PATH=$NEW:$JAVA_HOME/bin
PATH=${PATH#:*}
echo 
echo "Final:"
echo $PATH

답변2

현재 Java 버전을 설정해 보세요.

sudo update-alternatives --config java
sudo update-alternatives --config javac

(및 필요한 기타 Java 바이너리)

.bashrc그런 다음 또는 에서 다음을 설정하십시오 .zshrc.

#!/bin/bash
if [ -z "${JAVA_HOME}" ]
then
    JAVA_HOME=$(readlink -nf $(which java) | xargs dirname | xargs dirname)
    if [ ! -e "$JAVA_HOME" ]
    then
        JAVA_HOME=""
    fi
    export JAVA_HOME=$JAVA_HOME
fi

스크립트 소스

이미 대체 프레임워크에서 관리하고 있으므로 PATH 변수를 설정하지 않고도 Java 환경을 구성하는 데 충분합니다.

F님 건배하세요.

관련 정보