sudo를 사용하여 실행할 때 스크립트에 JAVA_HOME이 설정되지 않았습니다. $JAVA_HOME얻을 수 있고 올바른 응답을 얻을 수

java를 설치하고 JAVA_HOME환경 변수를 설정 해야하는 설치 스크립트를 실행하려고합니다 .

내가 설정 한 JAVA_HOME에서 /etc/profile또한 파일에 내가 전화 한 java.sh에서 /etc/profile.d. 나는 echo $JAVA_HOME올바른 응답을 sudo echo $JAVA_HOME얻을 수 있고 올바른 응답을 얻을 수 있습니다 .

에서 install.sh내가 실행하기 위해 노력하고있어, 나는 삽입 echo $JAVA_HOME. 내가없이이 스크립트를 실행 sudo하면 java 디렉토리가 표시됩니다. 스크립트를 실행하면 sudo비어 있습니다.

왜 이런 일이 일어나고 있습니까?

CentOS를 실행하고 있습니다.



답변

보안상의 이유로 sudo$ JAVA_HOME을 선택하지 않은 환경 변수를 지울 수 있습니다. /etc/sudoers파일에서를 찾으십시오 env_reset.

보낸 사람 man sudoers:

env_reset   If set, sudo will reset the environment to only contain the following variables: HOME, LOGNAME, PATH, SHELL, TERM, and USER (in addi-
           tion to the SUDO_* variables).  Of these, only TERM is copied unaltered from the old environment.  The other variables are set to
           default values (possibly modified by the value of the set_logname option).  If sudo was compiled with the SECURE_PATH option, its value
           will be used for the PATH environment variable.  Other variables may be preserved with the env_keep option.

env_keep    Environment variables to be preserved in the user's environment when the env_reset option is in effect.  This allows fine-grained con-
           trol over the environment sudo-spawned processes will receive.  The argument may be a double-quoted, space-separated list or a single
           value without double-quotes.  The list can be replaced, added to, deleted from, or disabled by using the =, +=, -=, and ! operators
           respectively.  This list has no default members.

따라서 JAVA_HOME을 유지하려면 env_keep에 추가하십시오.

Defaults   env_keep += "JAVA_HOME"

또는JAVA_HOME root ‘s에 설정하십시오 ~/.bash_profile.


답변

-E (환경 보존) 옵션으로 sudo를 실행하거나 (man 파일 참조) JAVA_HOME을 install.sh 스크립트에 넣으십시오.


답변