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と入力します。