Buat $ JAVA_HOME mudah diganti di Ubuntu [ditutup]

139

Di Ubuntu, saya ingin mengganti variabel lingkungan JAVA_HOME saya bolak-balik antara Java 5 dan 6.

Saya membuka terminal dan mengetik berikut ini untuk mengatur variabel lingkungan JAVA_HOME:

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

Dan di jendela terminal yang sama, saya ketik yang berikut untuk memeriksa bahwa variabel lingkungan telah diperbarui:

echo $JAVA_HOME

Dan saya melihat / usr/lib/jvm/java-1.5.0-sun yang saya harapkan. Selain itu, saya memodifikasi ~ / .profile dan mengatur variabel lingkungan JAVA_HOME ke /usr/lib/jvm/java-1.5.0-sun.

Dan sekarang untuk masalah - ketika saya membuka jendela terminal baru dan saya memeriksa variabel lingkungan JAVA_HOME saya dengan mengetikkan echo $ JAVA_HOME Saya melihat bahwa variabel lingkungan JAVA_HOME saya telah dikembalikan ke Jawa 6. Ketika saya reboot mesin saya (atau log keluar dan kembali, saya kira) variabel lingkungan JAVA_HOME diatur ke Java 5 (mungkin karena modifikasi yang saya buat di file ~ / .profile saya).

Apakah ada cara untuk mengatasi hal ini sehingga saya dapat mengubah lingkungan JAVA_HOME saya tanpa harus keluar dan kembali (DAN membuat perubahan variabel lingkungan tetap di semua jendela terminal baru)?

Taman Junho
sumber
29
Apa situs yang benar dan jawaban duplikat?
Martin Konicek
The ~/.profilefile hanya membaca ketika Anda login ke Ubuntu, jadi jika Anda logout / login kemudian JAVA_HOME diatur untuk semua terminal dan aplikasi lain yang Anda jalankan. Jika Anda mengatur JAVA_HOME di ~/.bashrcdalamnya hanya akan terlihat oleh aplikasi yang dijalankan dari terminal.
jr0cket

Jawaban:

196

Masukkan variabel lingkungan ke /etc/environmentfile global :

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

Jalankan "source / etc / environment" di setiap shell tempat Anda ingin variabel diperbarui:

$ source /etc/environment

Periksa apakah itu berfungsi:

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

Hebat, tidak perlu keluar.

Jika Anda ingin mengatur variabel lingkungan JAVA_HOME hanya di terminal, atur dalam file ~ / .bashrc .

Martin Konicek
sumber
9
Restart masih diperlukan untuk perubahan-perubahan ini untuk mempengaruhi aplikasi yang diluncurkan melalui UI Ubuntu (yaitu mengklik dua kali aplikasi)
Eric Hu
7
Bagaimana ini berbeda dari hanya mengatur variabel di setiap shell sialan?
mlissner
1
Cara lain untuk tidak harus menjalankan ini secara manual setiap kali adalah dengan memodifikasi file .bashrc Anda untuk memasukkan perintah "source / etc / environment"
nityan
1
@ MartinKonicek contoh Anda salah. seharusnya tidak ada 'ekspor' di jalur itu. / etc / environment mengandung pasangan nilai kunci
pdeva
1
Ingatlah bahwa /etc/environmentitu istimewa dan tidak memungkinkan penggantian variabel, mis. JRE_HOME=${JAVA_HOME}/jretidak akan berfungsi.
Abdull
31

Ini mungkin akan menyelesaikan masalah Anda: https://help.ubuntu.com/community/EnvironmentVariables

Variabel lingkungan luas sesi

Untuk mengatur variabel lingkungan dengan cara yang mempengaruhi lingkungan pengguna tertentu, seseorang tidak boleh menempatkan perintah untuk mengatur nilai-nilai mereka dalam file skrip shell tertentu di direktori home pengguna, tetapi gunakan:

~ / .pam_environment - File ini secara khusus dimaksudkan untuk mengatur lingkungan pengguna. Ini bukan file skrip, melainkan terdiri dari ekspresi penugasan, satu per baris.

Tidak direkomendasikan:

~ / .profile - Ini mungkin file terbaik untuk menempatkan penugasan variabel lingkungan, karena dijalankan secara otomatis oleh DisplayManager selama sesi desktop proses startup serta oleh shell login ketika seseorang masuk dari konsol tekstual.

Holger Frohloff
sumber
Dari tautan yang Anda berikan: "Di bawah ini tidak disarankan tetapi solusi sebelumnya (?) Yang diberikan pada halaman ini tidak berfungsi dengan rilis desktop 10,04. .Pam_environment tidak secara alami diproses dengan distribusi."
Calmarius
14
~. Saya mencoba mengatur PATH ke $ {PATH}: $ {HOME} / bin dan gagal mengevaluasi variabel. Hasil bersih: tidak dapat masuk :( Tetap dengan mengunjungi Ctrl-Alt-1 dan menjalankan "/ bin / rm ~ / .pam_environment". Berhati-hatilah atau gunakan akun sekunder untuk menguji pengaturan di sini.
Alain O'Dea
6
Secara pribadi saya tidak tahu mengapa mereka repot-repot membuat file lingkungan dan kemudian bekerja dengan cara yang sama sekali berbeda dari mekanisme lain untuk mengatur variabel lingkungan yang pernah bekerja sebelumnya. Pasangan nilai kunci sederhana seperti file lingkungan menggunakan adalah BS polos. Ada alasan kami menggunakan variabel dan tautan di lingkungan dan masih ada manfaatnya hingga saat ini. Ini menyederhanakan administrasi. Siapa pun bozo yang memutuskan cara PAM melakukan sesuatu dalam file ini yang terbaik adalah yang paling bodoh. Variabel PERLU untuk ditafsirkan.
Bill Rosmus
1
@ AlainO'Dea: Saya punya masalah yang sama persis. Terkejut dan khawatir ketika saya tidak bisa melewati layar login. Setelah beberapa penggalian di sekitar saya menemukan bahwa Anda dapat menggunakan variabel tetapi harus menggunakan sintaks yang berbeda. misalnya. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Ketika tidak menggunakan variabel, tugas sederhana tampaknya berhasil.
tim_wonil
Ya, saya setuju dengan @ AlainO'Dea. Jika ada kesalahan pada skrip Anda, Anda tidak akan bisa masuk. Hati hati.
Evan Hu
13

Coba langkah-langkah ini.

--Kami akan mengedit "etc \ profile". Variabel lingkungan harus dimasukkan di bagian bawah file. Karena Ubuntu tidak memberikan akses ke folder root, kita harus menggunakan beberapa perintah di terminal

Langkah1: Mulai Terminal. Ketikkan perintah:gksudo gedit /etc/profile

Langkah2: File teks profil akan terbuka. Masukkan variabel lingkungan di bagian bawah halaman ........... Misalnya: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

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

step3: simpan dan tutup file. Periksa apakah variabel lingkungan diatur dengan menggunakan perintah gema ........ Mis echo $PATH

Alex
sumber
9

Anda perlu memasukkan definisi variabel dalam ~/.bashrcfile.

Dari halaman bash man:

Ketika shell interaktif yang bukan shell login dimulai, bash membaca dan mengeksekusi perintah dari /etc/bash.bashrc dan ~ / .bashrc, jika file-file ini ada.

Paweł Nadolski
sumber
5

Secara tradisional, jika Anda hanya ingin mengubah variabel di jendela terminal Anda, atur dalam .bashrcfile, yang bersumber setiap kali terminal baru dibuka. .profilefile tidak bersumber setiap kali Anda membuka terminal baru.

Lihat perbedaan antara .profile dan .bashrc dalam pertanyaan: Apa perbedaan antara .bashrc, .bash_profile, dan .environment?

.bashrcharus menyelesaikan masalah Anda. Namun, itu bukan solusi yang tepat karena Anda menggunakan Ubuntu. Lihat halaman bantuan Ubuntu yang relevan " Variabel lingkungan luas sesi ". Jadi, tidak heran itu .profiletidak bekerja untuk Anda. Saya menggunakan Ubuntu 12.04 dan xfce. Saya mengatur .profiledan itu sama sekali tidak berpengaruh bahkan jika saya keluar dan masuk. Pengalaman serupa di sini . Jadi, Anda mungkin harus menggunakan .pam_environmentfile dan benar-benar lupa .profile, dan .bashrc. Dan CATATAN itu .pam_environmentbukan file skrip.

HongboZhu
sumber
1

Lihatlah bash(1), Anda perlu shell login untuk mengambil ~/.profile, yaitu -lopsi.

Nikolai Fetissov
sumber
1

Setelah membuat perubahan pada .profile, Anda perlu menjalankan file, agar perubahan tersebut berlaku.

root@masternode# . ~/.profile

Setelah ini selesai, perintah echo akan berfungsi.

CodeShane
sumber
Anda harus menggunakan ~/.profiledaripada ./.profile.
Alexis Wilke