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
sudo
왜 이런 일이 발생하는지 아시나요?
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을 입력합니다.