web-dev-qa-db-ja.com

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

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を実行しています。

20
Josh

セキュリティ上の理由から、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を設定します。

29
dogbane

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

21
mazianni