ทำให้ $ JAVA_HOME เปลี่ยนได้ง่ายใน Ubuntu [ปิด]


139

ใน Ubuntu ฉันต้องการสลับตัวแปรสภาพแวดล้อม JAVA_HOME ของฉันไปมาระหว่าง Java 5 และ 6

ฉันเปิดเทอร์มินัลแล้วพิมพ์ต่อไปนี้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

และในหน้าต่างเทอร์มินัลเดียวกันนั้นฉันพิมพ์ข้อความต่อไปนี้เพื่อตรวจสอบว่าตัวแปรสภาพแวดล้อมได้รับการอัพเดต:

echo $JAVA_HOME

และฉันเห็น/usr/lib/jvm/java-1.5.0-sunซึ่งเป็นสิ่งที่ฉันคาดหวังที่จะเห็น นอกจากนี้ฉันแก้ไข ~ / .profile และตั้งค่าตัวแปรสภาวะแวดล้อม JAVA_HOME เป็น /usr/lib/jvm/java-1.5.0-sun

และตอนนี้สำหรับปัญหา - เมื่อฉันเปิดหน้าต่างเทอร์มินัลใหม่และฉันตรวจสอบตัวแปรสภาพแวดล้อม JAVA_HOME ของฉันโดยพิมพ์echo $ JAVA_HOMEฉันเห็นว่าตัวแปรสภาพแวดล้อม JAVA_HOME ของฉันถูกเปลี่ยนกลับเป็น Java 6 เมื่อฉันรีบูตเครื่อง (หรือบันทึก ฉันคิดว่า) ตัวแปรสภาพแวดล้อม JAVA_HOME ถูกตั้งค่าเป็น Java 5 (น่าจะเป็นเพราะการปรับเปลี่ยนที่ฉันทำใน ~ / .profile)

มีวิธีแก้ไขปัญหานี้หรือไม่เพื่อให้ฉันสามารถเปลี่ยนสภาพแวดล้อม JAVA_HOME โดยไม่ต้องออกจากระบบและกลับมา (และทำให้การเปลี่ยนแปลงตัวแปรสภาพแวดล้อมนั้นติดอยู่ในหน้าต่างเทอร์มินัลใหม่ทั้งหมด)


29
ไซต์ที่ถูกต้องและคำตอบที่ซ้ำกันคืออะไร
Martin Konicek

~/.profileไฟล์ดังกล่าวจะถูกอ่านเมื่อคุณลงชื่อเข้าใช้ Ubuntu เท่านั้นดังนั้นหากคุณออกจากระบบ / เข้าสู่ระบบ JAVA_HOME จะถูกตั้งค่าสำหรับเทอร์มินัลทั้งหมดและแอปพลิเคชันอื่น ๆ ที่คุณใช้ หากคุณตั้งค่า JAVA_HOME ~/.bashrcไว้แอปพลิเคชันจะเรียกใช้จากเทอร์มินัลเท่านั้น
jr0cket

คำตอบ:


196

วางตัวแปรสภาพแวดล้อมลงใน/etc/environmentไฟล์โกลบอล:

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

ดำเนินการ "source / etc / environment" ในทุกเชลล์ที่คุณต้องการให้ตัวแปรถูกอัพเดต:

$ source /etc/environment

ตรวจสอบว่ามันใช้งานได้:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

เยี่ยมมากไม่ต้องออกจากระบบ

หากคุณต้องการตัวแปรสภาพแวดล้อม JAVA_HOME ชุดเฉพาะในสถานีที่ตั้งไว้ใน~ / .bashrcไฟล์


9
ยังจำเป็นต้องรีสตาร์ทเพื่อให้การเปลี่ยนแปลงเหล่านี้มีผลกับแอปที่เปิดตัวผ่าน Ubuntu UI (เช่นดับเบิลคลิกที่แอป)
Eric Hu

7
สิ่งนี้แตกต่างจากการตั้งค่าตัวแปรในทุกเชลล์ของ friggin อย่างไร
mlissner

1
อีกวิธีหนึ่งที่ไม่จำเป็นต้องเรียกใช้ด้วยตนเองทุกครั้งคือแก้ไขไฟล์. bashrc ของคุณเพื่อรวมคำสั่ง "source / etc / environment"
nityan

1
@MartinKonicek ตัวอย่างของคุณไม่ถูกต้อง ไม่ควรมี 'ส่งออก' ในบรรทัดนั้น / etc / environment มีคู่ของคีย์
pdeva

1
โปรดทราบว่า/etc/environmentเป็นสิ่งพิเศษและไม่อนุญาตให้มีการทดแทนตัวแปรเช่นJRE_HOME=${JAVA_HOME}/jreจะไม่ทำงาน
Abdull

31

นี่อาจจะแก้ปัญหาของคุณ: https://help.ubuntu.com/community/EnvironmentVariables

ตัวแปรสภาพแวดล้อมทั้งเซสชัน

ในการตั้งค่าตัวแปรสภาพแวดล้อมในลักษณะที่ส่งผลกระทบต่อสภาพแวดล้อมของผู้ใช้แต่ละคนไม่ควรวางคำสั่งเพื่อตั้งค่าในไฟล์เชลล์สคริปต์เฉพาะในโฮมไดเรกทอรีของผู้ใช้ แต่ใช้:

~ / .pam_environment - ไฟล์นี้มีความหมายโดยเฉพาะสำหรับการตั้งค่าสภาพแวดล้อมของผู้ใช้ ไม่ใช่ไฟล์สคริปต์ แต่ประกอบด้วยนิพจน์การมอบหมายหนึ่งรายการต่อบรรทัด

ไม่แนะนำ:

~ / .profile - ไฟล์นี้อาจเป็นไฟล์ที่ดีที่สุดสำหรับวางการกำหนดค่าตัวแปรสภาพแวดล้อมเนื่องจาก DisplayManager จะถูกดำเนินการโดยอัตโนมัติในระหว่างขั้นตอนการเดสก์ท็อปกระบวนการเริ่มต้นและเชลล์ล็อกอินเมื่อเข้าสู่ระบบจากคอนโซลข้อความ


จากลิงก์ที่คุณระบุ: "ไม่แนะนำด้านล่าง แต่โซลูชันก่อนหน้านี้ (?) ที่ให้ไว้ในหน้านี้ไม่สามารถใช้งานได้กับเดสก์ท็อป 10.04 รุ่น. pam_environment ไม่ได้รับการจัดจำหน่ายตามธรรมชาติ"
Calmarius

14
~ / .pam_environment เป็นวิธีที่ยอดเยี่ยมในการบล็อกการเข้าสู่ระบบของคุณหากคุณคิดว่ามันประมวลผลตัวแปร ฉันลองตั้งค่า PATH เป็น $ {PATH}: $ {HOME} / bin และไม่สามารถประเมินตัวแปรได้ ผลลัพธ์สุทธิ: ไม่สามารถเข้าสู่ระบบ :( แก้ไขได้โดยไปที่ Ctrl-Alt-1 และเรียกใช้ "/ bin / rm ~ / .pam_environment" ระมัดระวังเป็นพิเศษหรือใช้บัญชีสำรองเพื่อทดสอบการตั้งค่าที่นี่
Alain O'Dea

6
โดยส่วนตัวแล้วฉันไม่รู้ว่าทำไมพวกเขาถึงสร้างไฟล์สภาพแวดล้อมขึ้นมาจากนั้นมันทำงานในลักษณะที่แตกต่างจากกลไกอื่น ๆ สำหรับการตั้งค่าตัวแปรสภาพแวดล้อมที่เคยทำงานมาก่อน คู่ค่าคีย์แบบง่าย ๆ เช่นไฟล์สภาพแวดล้อมที่ใช้คือ BS ธรรมดา มีเหตุผลที่เราใช้ตัวแปรและการเชื่อมโยงในสภาพแวดล้อมและยังคงมีบุญในวันนี้ มันลดความซับซ้อนของการบริหาร ใครก็ตามที่ bozos เป็นผู้ตัดสินใจว่าวิธี PAM ในการทำสิ่งต่าง ๆ ในไฟล์นี้ดีที่สุดคือสิ่งที่แย่ที่สุด ตัวแปรที่ต้องตีความ
Bill Rosmus

1
@ AlainO'Dea: ฉันมีปัญหาเดียวกันทุกประการ ตกใจและกังวลเมื่อฉันไม่สามารถผ่านหน้าจอเข้าสู่ระบบที่ผ่านมา หลังจากขุดไปรอบ ๆ ฉันพบว่าคุณสามารถใช้ตัวแปร แต่ต้องใช้ไวยากรณ์ที่แตกต่างกัน เช่น. PATH DEFAULT = $ {PATH}: $ {HOME} / bin เมื่อไม่ได้ใช้ตัวแปรการมอบหมายอย่างง่ายดูเหมือนจะทำงานได้
tim_wonil

ใช่ฉันเห็นด้วยกับ @ AlainO'Dea หากมีข้อผิดพลาดในสคริปต์ของคุณคุณจะไม่สามารถเข้าสู่ระบบได้ ดูแล.
Evan Hu

13

ลองขั้นตอนเหล่านี้

- เราจะแก้ไข "etc \ profile" ตัวแปรสภาพแวดล้อมจะต้องใส่ที่ด้านล่างของไฟล์ เนื่องจาก Ubuntu ไม่ให้การเข้าถึงโฟลเดอร์รูทเราจะต้องใช้คำสั่งบางอย่างในเทอร์มินัล

ขั้นที่ 1: เริ่มต้นเทอร์มินัล พิมพ์คำสั่ง:gksudo gedit /etc/profile

ขั้นตอนที่ 2: ไฟล์ข้อความโปรไฟล์จะเปิดขึ้น ป้อนตัวแปรสภาพแวดล้อมที่ด้านล่างของหน้า ........... เช่น: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

ขั้นที่ 3: บันทึกและปิดไฟล์ ตรวจสอบว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าโดยใช้คำสั่ง echo ........ เช่น echo $PATH


9

คุณต้องใส่คำจำกัดความของตัวแปรใน~/.bashrcไฟล์

จากหน้าคนทุบตี:

เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน bash จะอ่านและดำเนินการคำสั่งจาก /etc/bash.bashrc และ ~ / .bashrc หากมีไฟล์เหล่านี้อยู่


5

ตามเนื้อผ้าถ้าคุณเพียงต้องการเปลี่ยนตัวแปรในหน้าต่างเทอร์มินัลของคุณให้ตั้งค่าเป็น.bashrcไฟล์ซึ่งจะมีที่มาทุกครั้งที่เปิดเทอร์มินัลใหม่ .profileไฟล์ไม่มีที่มาทุกครั้งที่คุณเปิดเทอร์มินัลใหม่

ดูความแตกต่างระหว่าง. profile และ. bashrc ในคำถาม: อะไรคือความแตกต่างระหว่าง. bashrc, .bash_profile และ. สิ่งแวดล้อม

.bashrcควรแก้ปัญหาของคุณ อย่างไรก็ตามมันไม่ได้เป็นทางออกที่เหมาะสมตั้งแต่คุณใช้งาน Ubuntu ดูหน้าช่วยเหลือของ Ubuntu ที่เกี่ยวข้อง " ตัวแปรสภาพแวดล้อมทั้งเซสชัน " ดังนั้นไม่น่าแปลกใจที่.profileไม่ได้ผลสำหรับคุณ ฉันใช้ Ubuntu 12.04 และ xfce ฉันจะตั้งค่าของฉัน.profileและมันเป็นเพียงการไม่ได้รับผลกระทบแม้ว่าผมจะออกจากระบบและใน. ประสบการณ์ที่คล้ายกันที่นี่ ดังนั้นคุณอาจจะต้องใช้.pam_environmentไฟล์และทั้งหมดลืมเกี่ยวกับและ.profile .bashrcและหมายเหตุที่.pam_environmentไม่ใช่ไฟล์สคริปต์



1

ฉันรู้ว่านี่เป็นคำถามที่เย็นชานาน แต่มันก็ปรากฏขึ้นทุกครั้งที่มีการเปิดตัว Java รุ่นใหม่หรือรุ่นล่าสุด ตอนนี้สิ่งนี้จะนำไปใช้กับการแลกเปลี่ยน 6 และ 7 ได้อย่างง่ายดาย

ฉันเคยทำสิ่งนี้ในอดีตกับupdate-java-alternatives: http://manpages.ubuntu.com/manpages/hardy/man8/update-java-alternatives.8.html


1

หลังจากทำการเปลี่ยนแปลงเป็น. profile คุณจะต้องเรียกใช้ไฟล์เพื่อให้การเปลี่ยนแปลงมีผล

root@masternode# . ~/.profile

เมื่อเสร็จสิ้นแล้วคำสั่ง echo จะทำงาน


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