2012-07-13 3 views
11

Jar 파일을 실행하는 Linux 상자에 bash 스크립트가 있습니다. 일반 사용자로 로그인했을 때 나는 스크립트를 실행할 수있는 권한이 없습니다,하지만 다음 로그 인쇄 :JAVA_HOME이 Sudo로 발견되지 않았습니다.

*INFO * Using JVM found at /opt/jdk6/bin/java 

그래도 난 sudo를 스크립트를 사용하려고, 그것은 제공을 :

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set 

JAVA_HOME을 위 경로와 동일하게 설정했습니다. echo $JAVA_HOME &으로 볼 수 있으며 스크립트 내에서 옵션으로 설정됩니다. 스크립트가 문제가되지 않아서 행복합니다. 기본 CQ5 제어 스크립트입니다 & 다른 수십 개의 상자에서 문제없이 사용하고 있습니다. &이 내가 리눅스를 설치하지 않았다는 것을 가정한다면, 내가 잘못하고있는 것을 정확히 알 수 없을까?

sudo 명령을 실행하면 내가 직접 설정 한 JAVA_HOME에 액세스 할 수 있습니까?

+1

루트와 일반 사용자 등 모두'에코 $ JAVA_HOME'의 정확한 출력은 무엇입니까? –

+0

Andrew, 저는 sudoer와 마찬가지로 시스템 (sysadmin 아님)에서 루트 사용자로서 액세스 할 수 없습니다. 그냥 여기에 문제를 발견 : http://unix.stackexchange.com/questions/6127/java-home-not-set-in-script-when-run-using-sudo Sudo는 환경 변수를 제거하고 관리했습니다. 'sudo -E' 플래그로 – anotherdave

+1

나는 그것이 배포판에 달렸다고 믿는다 - 어떤 sudos는 envs를 유지한다. 다른 사람들은 그렇지 않다. – Raz

답변

24

기본적으로 sudo은 스폰 된 명령의 환경을 정리합니다. 그것을 유지 -E을 전달합니다

sudo -E env 

는에 비교 :

sudo env 
+0

Thanks mate, 그냥 unix.stackexchange에서 동시에 찾았다. :) – anotherdave

1

JAVA_HOME이 수출되지 않았을 때 "sudo를 -E"문제가 해결되지 않았다. 그리고 그것이 수출되었을 때, -E없이 "sudo"는 똑같이 작동합니다.

따라서 .bash_profile 및 .bashrc 파일에 export JAVA_HOME=.../jdk<version>을 추가 할 수 있습니다.

.bash_profile과 .bashrc의 차이점을 궁금해하는 경우, 로그인 할 때 .bash_profile이 실행됩니다 (예 : 진단/환영 정보 표시). .bash_rc는 새 터미널을 열 때 (예 : shift-ctrl-T) 실행됩니다.

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi 
0

당신은 언제나 다음과 같이 명시 적으로 자바에 전달할 수 : 두 경우 모두에 대한 몇 가지 명령을 실행하기 위해

, 당신은 .bash_profile을 소스의 .bashrc를 .bashrc에 파일을 넣어하도록 할 수 있습니다 :

sudo java -Djava.home=$JAVA_HOME Test

관련 문제