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 스크립트에 넣으십시오.