Masalah
Saya memiliki Mesin Virtual Ubuntu 11.04 dan saya ingin mengatur lingkungan pengembangan Java saya. Saya melakukan sebagai berikut
sudo apt-get install openjdk-6-jdk
Menambahkan entri berikut ke ~ / .bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
Simpan perubahan dan keluar
Buka terminal lagi dan ketikkan yang berikut ini
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
Tidak ada yang terjadi, seperti jika ekspor JAVA_HOME dan penambahannya ke PATH tidak pernah dilakukan.
Larutan
Saya harus pergi ke ~ / .bashrc dan menambahkan entri berikut di akhir file
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Pertanyaan
- Mengapa saya harus melakukan itu? Saya pikir bash_profile, bash_login atau profil karena tidak ada dua yang dieksekusi terlebih dahulu sebelum bashrc.
- Apakah dalam kasus ini terminal saya shell non-login ?
- Jika demikian, mengapa ketika melakukan su setelah terminal dan meletakkan kata sandi itu tidak mengeksekusi profil di mana saya juga mengatur ekspor yang disebutkan di atas?
.profile
seharusnya hanya bersumber saat Anda masuk..profile
diabaikan oleh bash jika.bash_profile
ada. Lihat jawaban saya di sini danman bash
untuk lebih jelasnya..profile
.Anda dapat memeriksa apakah Bash shell Anda dimulai sebagai shell-login dengan menjalankan:
Jika jawabannya adalah
off
Anda tidak menjalankan shell login.Baca bagian doa manual Bash tentang bagaimana Bash membaca (atau tidak membaca) file konfigurasi yang berbeda.
Kutipan dari
man bash
:su
di sisi lain juga tidak memulai shell login secara default, Anda harus mengatakannya untuk melakukannya dengan menggunakan--login
opsi.sumber
Saya pikir perlu disebutkan bahwa Anda dapat mengubah default gnome-terminal untuk menggunakan shell login (mis. Bash -l) dengan mengedit preferensi profil.
pergi ke Edit -> Preferensi Profil -> tab Judul dan Perintah centang opsi "Jalankan perintah sebagai shell masuk"
sumber
~/.bash_profile
mengevaluasi dengan sangat cepat, yang mungkin memang demikian. Hal yang baik untuk diperiksa adalah mengusir semua panggilan ke proses lain yang biasanya cukup mahal.Jika Anda membuka terminal atau menjalankan
su
shell tidak dieksekusi sebagai shell login tetapi sebagai shell interaktif normal. Jadi bunyinya~/.bashrc
tapi tidak~/.bash_profile
. Anda dapat menjalankannyasu
dengan-l
opsi untuk membuatnya menjalankan shell Anda sebagai shell login.Ketika Anda bekerja dengan GUI, shell biasanya tidak pernah dijalankan sebagai shell login sehingga biasanya baik-baik saja untuk memasukkan semua barang Anda
~/.bashrc
.sumber
TL; DR
Dalam pengaturan ubuntu klasik yang direkomendasikan,
~/.bash_profile
akan dievaluasi hanya pada kesempatan tertentu. Dan itu masuk akal.Masukkan barang-barang Anda
~/.bashrc
, itu akan dievaluasi setiap saat.Ok, saya ingin mengerti, mengapa ini masuk akal?
Titik titik untuk memahami apa yang sedang terjadi:
Jadi waktu "masuk" biasanya:
ssh
, karena shell akan menjadi bapak dari semua proses, itu akan memuat Anda~/.bash_profile
.gnome-session
untuk ubuntu klasik) akan bertanggung jawab untuk membaca.profile
.Ok, jadi kemana harus menaruh barang-barang saya?
Agak rumit, cerita lengkapnya ada di sini . Tapi di sini ada run down yang sangat umum untuk pengguna ubuntu. Jadi mempertimbangkan itu:
bash
shell,~/.bash_profile
dan ikuti rekomendasi untuk menambahkan pemuatan~/.bashrc
di Anda~/.bash_profile
sehingga untuk mendapatkan setidaknya satu file yang akan dievaluasi apa pun mecanisme doa .Ini adalah saran cepat tempat meletakkan barang.
~ / .bashrc (Mendapat evaluasi dalam semua kesempatan , asalkan Anda mengikuti rekomendasi)
Untuk variabel dan kode lingkungan evaluasi cepat untuk penggunaan baris perintah khusus pengguna dan bash saja (alias misalnya). bashism dipersilakan.
Itu dimuat sendiri pada:
bash
screen
panel atau tab baru. (tidaktmux
!)terminator
/gnome-terminal
...) jika Anda tidak mencentang opsi "jalankan perintah sebagai shell login".Dan itu akan dimuat di semua kesempatan lain berkat rekomendasi sebelumnya.
~ / .bash_profile (Mendapat evaluasi hanya pada acara tertentu )
Untuk variabel dan kode lingkungan evaluasi lambat untuk proses sesi khusus pengguna dan Anda saja . bashism dipersilakan. Itu dimuat pada:
tmux
panel atau jendela baru (pengaturan default), (tidakscreen
!)bash -l
,terminator
/gnome-terminal
...) hanya jika Anda mencentang opsi "jalankan perintah sebagai shell login".~ / .profile (Hanya dievaluasi dalam sesi grafis)
Untuk variabel lingkungan evaluasi lambat dan tanpa larangan untuk pengguna Anda saja dan semua proses sesi grafis . Itu dimuat saat masuk di UI grafis Anda.
sumber
.profile
jika.bash_profile
tidak ada.env
saya tidak melihat variabel env ditetapkan (saya mencoba menutup iTerm dan membuka kembali). Tapi saya perhatikan bahwa ketika saya menginstal Android studio dan aplikasi lain, semua vars itu sudah diatur/.bash_profile
. Jadi ketika saya menambahkannya/.bash_profile
bekerja seperti pesona. Mengapa demikian?