단일 쉘스크립트로 실행하고 내보내는 방법

단일 쉘스크립트로 실행하고 내보내는 방법

두 개의 쉘 스크립트가 있습니다.

$ 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 -cenvsudoenvBASH_ENVJAVA_HOMEbash -cupdate-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

$

관련 정보