sudo로 실행할 때 JAVA_HOME이 스크립트에 설정되지 않았습니다.

sudo로 실행할 때 JAVA_HOME이 스크립트에 설정되지 않았습니다.

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

및 에서 JAVA_HOME파일 을 호출했습니다 /etc/profile. 나는 올바른 응답을 얻을 수 있고, 심지어 올바른 응답을 얻을 수도 있습니다.java.sh/etc/profile.decho $JAVA_HOMEsudo echo $JAVA_HOME

install.sh"실행 하려고 합니다" 에 echo $JAVA_HOME.sudosudo

왜 이런 일이 발생하는지 아시나요?

CentOS를 실행 중입니다.

답변1

보안상의 이유로 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루트에 설정합니다 ~/.bash_profile.

답변2

-E(환경 보존) 옵션(man 파일 참조)을 사용하여 sudo를 실행하거나 install.sh 스크립트에 JAVA_HOME을 입력합니다.

관련 정보