JAVA_HOME tidak disetel dalam skrip saat dijalankan menggunakan sudo

19

Saya mencoba menjalankan skrip instalasi yang memerlukan java untuk diinstal dan JAVA_HOMEvariabel lingkungan harus ditetapkan.

Aku telah menetapkan JAVA_HOMEdi /etc/profiledan juga dalam file saya disebut java.shdi /etc/profile.d. Saya bisa echo $JAVA_HOMEdan mendapatkan respons yang benar dan saya bahkan bisa sudo echo $JAVA_HOMEdan mendapatkan respons yang benar.

Di install.shsaya mencoba menjalankan, saya memasukkan echo $JAVA_HOME. Ketika saya menjalankan skrip ini tanpa sudosaya melihat direktori java; ketika saya menjalankan skrip dengan sudoitu kosong.

Adakah ide mengapa ini terjadi?

Saya menjalankan CentOS.

Josh
sumber
Saya juga mengalami masalah ini saat menjalankan Ubuntu 14.04, kedua jawaban yang diusulkan itu bekerja untuk saya
laconbass

Jawaban:

28

Untuk alasan keamanan, sudodapat menghapus variabel lingkungan yang menjadi alasannya mungkin tidak mengambil $ JAVA_HOME. Lihat di /etc/sudoersfile Anda untuk env_reset.

Dari 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.

Jadi, jika Anda ingin tetap menggunakan JAVA_HOME, tambahkan ke env_keep:

Defaults   env_keep += "JAVA_HOME"

Atau , atur JAVA_HOMEdi root ~/.bash_profile.

dogbane
sumber
2
Ya, itu dia. Seandainya tidak ada yang bisa melakukan itu. Terima kasih!
Josh
20

Jalankan sudo dengan opsi -E (lingkungan pertahankan) (lihat file man), atau masukkan JAVA_HOME dalam skrip install.sh.

mazianni
sumber
Opsi -E tidak tersedia di CentOS.
Zubin