두 개의 쉘 스크립트가 있습니다.
$ cat java_alternative_7
#!/bin/sh
sudo update-java-alternatives -s java-7-oracle
$ cat java_home_7
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
두 파일을 모두 실행/가져올 수 있습니다. 간단합니다.
$ sh java_alternative_7
$ javac -version
javac 1.7.x_yy
$ source java_home_7
$ echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle
이 두 단계를 동시에 완료하려면 어떻게 해야 합니까?
답변1
다음과 같은 스크립트를 병합하고 싶지 않은 경우
#!/bin/sh
sudo \
env JAVA_HOME=/usr/lib/jvm/java-7-oracle \
update-java-alternatives -s java-7-oracle
당신이 사용할 수있는
#!/bin/sh
sudo \
env BASH_ENV=path/to/java_home_7 \
bash -c 'update-java-alternatives -s java-7-oracle'
이렇게 하면 스크립트가 로 시작하는 인라인 스크립트에서 실행됩니다 update-java-alternatives
. 이 유틸리티는 환경 변수를 설정하는 스크립트의 경로 이름으로 환경 변수를 설정합니다. 이로 인해 스크립트는 유틸리티를 호출하기 전에 자동으로 다른 스크립트의 소스를 얻습니다.bash -c
env
sudo
env
BASH_ENV
JAVA_HOME
bash -c
update-java-alternatives
환경 변수 설정을 사용하면 환경이 처음에 지워지 env
더라도 변수가 설정됩니다 .sudo
답변2
내가 무엇을 하고 있는지 깨달았는지 잘 모르겠습니다. 어떤 의견이나 제안이라도 대단히 감사하겠습니다.
$ cat java7
#!/bin/sh
alternative=java-7-oracle
sudo update-java-alternatives -s $alternative
export JAVA_HOME=/usr/lib/jvm/$alternative
$ cat java8
#!/bin/sh
alternative=java-8-oracle
sudo update-java-alternatives -s $alternative
export JAVA_HOME=/usr/lib/jvm/$alternative
$ . java7;javac -version;echo $JAVA_HOME
javac 1.7.x_yy
/usr/lib/jvm/java-7-oracle
$ . java8;javac -version;echo $JAVA_HOME
javac 1.8.x_yy
/usr/lib/jvm/java-8-oracle
고쳐 쓰다
나 자신과 필요한 사람을 위해 업데이트하고 있습니다.
먼저 ~/.bashrc
.
#http://serverfault.com/a/276221/113357
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
그리고 내 새 ~/bin/java_home
스크립트.
#!/bin/bash
if [ $# -ne 1 ]
then
echo please select a jname.
update-java-alternatives -l
return;
fi
jname=$1
sudo update-java-alternatives -s $jname
source ~/.bashrc
JDK를 변경하고 싶을 때 이렇게 합니다.
$ source java_home java-7-oracle
$ source java_home java-8-oracle
JAVA_HOME
이 변수는 새 터미널에서도 변경됩니다. 이전에는 java7
이것 java8
으로 변경되었습니다.
$ echo java7
#!/bin/sh
source java_home java-7-oracle
$ echo java8
#!/bin/sh
source java_home java-8-oracle
$