sudoを使用して実行すると、JAVA_HOMEがスクリプトで設定されない


19

JavaのインストールとJAVA_HOME環境変数の設定を必要とするインストールスクリプトを実行しようとしています。

で設定JAVA_HOME/etc/profileたファイルとjava.sh、で呼び出したファイルにも設定しました/etc/profile.d。私echo $JAVA_HOMEは正しい応答を得ることができますし、正しい応答を得ることもできsudo echo $JAVA_HOMEます。

install.sh、私が実行しようとしている、私は挿入しましたecho $JAVA_HOMEsudojavaディレクトリが表示されずにこのスクリプトを実行すると、スクリプトを実行すると、sudo空白になります。

これが起こっている理由は何ですか?

CentOSを実行しています。


また、Ubuntu 14.04を実行してこの問題を経験しましたが、両方の提案された答えが私のために働いた
-laconbass

回答:


28

セキュリティ上の理由から、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_HOMEroot に設定し~/.bash_profileます。


2
そうだね。それができるとは思いもしませんでした。ありがとう!
ジョシュ

20

-E(環境の保持)オプションを使用してsudoを実行するか(manファイルを参照)、またはinstall.shスクリプトにJAVA_HOMEを配置します。


-EオプションはCentOSでは使用できません。
ズビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.