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
に~/.bash_profile
を設定します。
-E(環境の保持)オプションを指定してSudoを実行する(manファイルを参照)か、Java_HOMEをinstall.shスクリプトに追加します。