JAVA_HOME ไม่ได้ตั้งค่าในสคริปต์เมื่อเรียกใช้โดยใช้ sudo


19

ฉันพยายามเรียกใช้สคริปต์การติดตั้งที่ต้องมีการติดตั้งจาวาและ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


ผมมีประสบการณ์ยังมีปัญหานี้ใช้ Ubuntu 14.04, คำตอบทั้งสองเสนอทำงานสำหรับฉัน
laconbass

คำตอบ:


28

เพื่อเหตุผลด้านความปลอดภัยsudoอาจล้างตัวแปรสภาพแวดล้อมซึ่งเป็นสาเหตุที่อาจไม่ได้รับ $ JAVA_HOME ดูของคุณในแฟ้ม/etc/sudoersenv_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
ใช่นั่นคือมัน ไม่รู้ว่าจะทำอย่างนั้นได้ ขอบคุณ!
Josh

20

รัน sudo ด้วยอ็อพชัน -E (รักษาสภาพแวดล้อม) (ดูที่ไฟล์ man) หรือวาง JAVA_HOME ในสคริปต์ install.sh


อ็อพชัน -E ไม่พร้อมใช้งานใน CentOS
Zubin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.