Pada sistem modern, tidak lazim terjadi kasus yang penting, tetapi itu memang terjadi. (Khususnya, jika Anda menggunakan operasi shell dalam vim
bentuk seperti :r !command
atau in-line !<motion>command
.)
Apa yang akan Anda tempatkan di bawah ~ / .bashrc? hanya alias?
Anda memasukkan hal-hal ~/.bashrc
yang tidak akan diwarisi oleh subkulit secara otomatis; ini berarti alias dan fungsi, sebagian besar, meskipun kadang-kadang Anda memiliki pengaturan variabel yang tidak Anda inginkan terlihat di luar shell (ini sangat jarang). Dapat diperdebatkan bahwa itu harus diekspor entah bagaimana, tetapi berbagai upaya percobaan telah mengalami masalah kompatibilitas dengan mencoba menyembunyikannya di lingkungan dan sebagian besar telah ditinggalkan.
Jika saya ingin menetapkan variabel lingkungan dan menambahkannya ke PATH (misalnya JAVA_HOME) di mana itu akan menjadi tempat terbaik untuk meletakkan entri ekspor? di ~ / .bash_profile atau ~ / .bashrc?
Anda menempatkan pengaturan lingkungan ~/.bash_profile
sehingga mereka diberikan pengaturan awal yang waras. Terkadang Anda ingin menimpanya (seringkali ini dilakukan oleh lingkungan yang kompleks seperti Matlab atau Cadence); jika Anda memasukkan pengaturan lingkungan ~/.bashrc
maka shell dijalankan dari dalam lingkungan tersebut akan kehilangan kustomisasi lingkungan, dan hasilnya mungkin tidak berfungsi dengan baik. Ini juga berlaku jika Anda menggunakan paket seperti modul , virtualenv , rvm , dll untuk mengelola beberapa lingkungan pengembangan; memasukkan pengaturan ~/.bashrc
Anda berarti Anda tidak dapat menjalankan lingkungan yang Anda inginkan dari dalam editor Anda, tetapi sebaliknya akan dipaksa ke dalam sistem default.
Dalam shell non-login, saya percaya ~ / .bash_profile tidak "diambil".
Ini benar; Anda biasanya ingin shell awal menjadi shell login dan setiap shell dimulai di bawah yang tidak menjadi shell login. Jika shell awal bukan shell login, Anda tidak akan memiliki pengaturan default PATH
atau berbagai lainnya (termasuk JAVA_HOME
contoh Anda ).
Sebagian besar lingkungan desktop diluncurkan dari manajer display (artinya, sebagian besar login grafis) tidak mengatur lingkungan login untuk seluruh desktop, sehingga Anda dipaksa untuk menjalankan shell awal di terminal sebagai shell login. Hal ini menyebabkan sejumlah masalah (terutama bahwa PATH
dan semacamnya tersedia untuk program dijalankan dari misalnya panel tidak diatur dengan benar, karena panel bukan terminal dan belum berjalan ~/.bash_profile
), tetapi merupakan kompromi yang masuk akal mengingat bahwa itu tidak selalu mungkin untuk berjalan dengan sehat ~/.bash_profile
di lingkungan non-interaktif di awal sesi yang dimulai oleh manajer tampilan, tergantung pada isinya. Terkadang disarankan untuk menempatkan pengaturan lingkungan di~/.bashrc
alih-alih mengonfigurasi shell login sebagai gantinya; seperti dibahas di atas, karya ini selama Anda tidak perlu menimpa lingkungan tersebut, dan menyebabkan pecah aneh sekali Anda lakukan perlu untuk melakukannya.
Saya baru-baru ini membantu mendiagnosis masalah seperti ini pada OS X di mana pengguna yang telah menempatkan pengaturan ~/.bashrc
kemudian mulai menggunakan rvm
dan perlbrew melihat perilaku aneh, karena lingkungan yang diatur oleh keduanya "dibatalkan" oleh ~/.bashrc
editor dalam dan sudo
(yang pada OS X , tidak seperti Linux, menyebarkan pengguna $HOME
sehingga ~/.bashrc
dijalankan oleh shell root). Sebelum mencoba menggunakan lingkungan itu, tidak ada masalah; saat mulai menggunakannya, mereka bingung dengan hilangnya pengaturan mereka yang tidak terduga.
modules
danrvm
merupakan alat pengembang, seperti Matlab dan Cadence untuk definisi "pengembang" yang agak berbeda. Pengembangan sederhana juga tidak memerlukan mereka, tetapi ketika Anda perlu uji terhadap beberapa versi Ruby, Perl, atau Python maka Anda benar-benar ingin sesuatu sepertirvm
,perlbrew
, danvirtualenv
(masing-masing) sekitar untuk membantu menjaga semuanya lurus.sejujurnya, ada sedikit perbedaan hari ini terlepas dari apa yang dikatakan guru.
masalah di balik ini adalah bahwa saat ini kami login secara grafis daripada melalui shell login. di masa lalu, kita unix pengguna suka melihat laporan singkat tentang apa yang terjadi di server segera setelah masuk - maka kita akan mulai X dengan baris perintah - laporan ini sering membutuhkan waktu untuk menghasilkan (misalnya 10-20 detik). dan kemudian kita tidak ingin melihat hal yang sama ketika kita mulai misalnya xterm. dengan demikian perbedaannya.
Saat ini saya tidak berpikir perbedaan itu penting sekarang. saya pikir hari ini jika Anda sumber bashrc di bash_profile tidak ada yang bisa menyalahkan Anda.
perhatikan bahwa ini tidak berlaku untuk macos x (setiap terminal.app dimulai adalah shell login)
sumber
~/.bash_profile
pun yang tidak memiliki sumber~/.bashrc
agak sulit untuk dikerjakan dan hampir rusak. Aplikasi terminal grafis berarti lebih mudah untuk hanya mencari ~ / .bashrc dan meletakkan semua konfigurasi di sana.Nah, tentang "Login Grafis", itu tergantung pada * DM yang Anda gunakan ...
Dengan GDM (Gnome 3.18) saya punya ini:
/ etc / gdm / Xsession
Jadi, ~ / .profile didapat dari login menggunakan / bin / sh dan bukan / bin / bash
Ada dua kasus
Jadi profil / bin / sh adalah ~ / .profile dan bukan ~ / .bash_profile, ~ / .zprofile
File ini harus digunakan untuk pengaturan "shell agnostic" , seperti path dan variabel lingkungan.
TIDAK boleh ada program yang dapat dieksekusi untuk interaksi pengguna hanya login kecuali di sini (cek surat, keberuntungan, dll ...)
rc ~ /.* hanya dimaksudkan untuk sesi "interaktif" (alias misalnya ...)
Ada perbedaan antara bash dan zsh untuk shell login interaktif
sumber bash saja .bash_profile, sedangkan sumber zsh dalam urutan:
Cara yang benar untuk melakukan ~ / .bash_profile dijawab di sini:
Perbedaan antara .bashrc dan .bash_profile
Untuk mengaktifkan pengujian (dan pembuatan profil), Anda dapat menggunakan ini
~ / .bash_profile:
~ / .zprofile:
kemudian, untuk menguji:
Jadi RVM / virtualenv harus masuk ~ / .profile, IMHO
Tapi ini TIDAK BEKERJA , kadang-kadang ...
Misalnya, virualenvwrapper hanya berfungsi jika shell yang menjalankan Xsession adalah bash "asli" (mengekspor BASH_VERSION)
Jika Anda menggunakan sistem dasbor , variabel lingkungan dan pengaturan jalur berfungsi, tetapi definisi fungsi virualenvwrapper tidak berfungsi karena skrip tidak kompatibel dengan POSIX.
Script tidak memberikan kesalahan tetapi berakhir tanpa definisi "workon" .
Jadi Anda dapat mengatur lingkungan di ~ / .profile , hanya untuk mengaktifkan eksekusi python yang benar dari klien dimulai langsung dari X:
https://gist.github.com/datagrok/2199506
https://www.bountysource.com/issues/9061991-setting-up-up-your-computer-virtualenvwrapper-linux-all
Tetapi untuk virualenwrapper Anda memiliki dua alternatif:
Ini berarti bahwa klien X (emacs misalnya) harus dimulai dari terminal shell dan bukan dari yang grafis!
"Aku tidak bisa mendapatkan kepuasan ..."
sumber