편집하다
질문은 bash 스크립팅 및 Java 환경에 관한 것입니다. 인내심을 갖고 시간을 내어 답변해 주신 분들께 감사드립니다. 나는 감사합니다.
Java 환경에서는 sdkman을 사용하기 시작했습니다. 사실 저는 이 작은 스크립트를 시작할 때 비슷한 것을 찾고 있었고 비슷한 것을 하려고 생각하고 있었습니다. 내 질문에 대한 답을 찾고 있는 모든 사람에게 이 도구를 추천합니다. 자신만의 스크립트가 있는지는 중요하지 않습니다. 한 번 시도해 보시기를 적극 권장합니다.
sdkman은 언어 버전 설치, 측면 요구사항(예: maven, gradle 및 kotlin) 및 환경 변수를 처리합니다.
원래 질문
활성 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님 건배하세요.