TL; DR: Pastikan RVM terbaru untuk setidaknya 1,26.11 dengan menginstal ulang atau mengeluarkan perintah rvm get head
, dan hanya diinisialisasi sekali per lingkungan terminal.
Hasil
Akhirnya saya bisa memperbaiki lingkungan saya. Saya akan memposting beberapa informasi yang berkaitan dengan masalah spesifik saya dalam upaya untuk membantu beberapa, meskipun yang lain mungkin memiliki gejala yang sama tetapi penyebab utama lainnya.
Sebab
Salah satu bagian dari masalah root berasal dari RVM, dan bagaimana ini diinisialisasi untuk lingkungan baris perintah saya. Saya telah menemukan beberapa cara berbeda untuk melakukan ini, terutama karena satu metode tambahan khusus dibuat untuk fish
lingkungan shell.
Tampaknya penyebab utamanya adalah:
- menginisialisasi RVM lebih dari sekali, karena saya memiliki beberapa pernyataan, satu per file konfigurasi terminal, dan karena bagaimana mereka dirantai, saya tidak mengetahui yang lain yang secara otomatis ditambahkan.
- Atau, entah bagaimana pernyataan ditambahkan yang menggabungkan inisialisasi untuk satu lingkungan terminal, katakanlah
fish
, dan sedang dijalankan di lingkungan terminal saya yang lain bash
,, atau sebaliknya. Ini dapat dilihat pada perincian saya di bawah ini di mana bash
PATH yang rusak memiliki beberapa lintasan yang dibatasi oleh :
s, tetapi kemudian yang lain juga termasuk oleh spasi, yang merupakan sintaks yang salah untuk bash
, tetapi yang benar untuk fish
.
- Atau keduanya terjadi!
Kemudian bagian lain dari masalah root adalah tampaknya ada bug terkait RVM / direnv baru-baru ini merangkak mengenai fungsi trap. Saya mungkin mengalami ini lagi dengan memiliki salah satu rilis RVM bermasalah lainnya yang dapat disebabkan oleh:
- Instalasi ulang:
curl -sSL https://get.rvm.io | bash
- Pembaruan manual:
rvm get head
- Update otomatis (yang saya baru saja dilakukan) dengan menambahkan
rvm_autoupdate_flag=2
ke~/.rvmrc
Masalah ini harus diperbaiki pada 30 Maret 2016, atau rilis 1.26.11:
Cerita
Setelah berkelahi dengan utilitas GNU untuk melakukan pencarian lengkap dari sistem file, mengintip isi file, saya menggunakan Atom untuk melakukan ini lebih sukses, dan menemukan bahwa satu-satunya kejadian shell_session_update
ditemukan dalam /etc/bashrc_Apple_Terminal
file yang disebutkan oleh Zanchey (selain file sejarah dan seperti). Saya juga tidak yakin mengapa itu dijalankan karena saya menggunakan iTerm (2), dan nilai $TERM_PROGRAM
dalam hal ini adalah iTerm.app
dan tidak Apple_Terminal
.
Itu juga tidak membantu bahwa saya, untuk beberapa alasan, harus mengelola instalasi RVM lebih dari sekali, melalui proses instalasi, yang tampaknya menambahkan konfigurasi ke beberapa 'dotfiles', di mana saya juga secara manual menambahkan beberapa atau baris .
Bersamaan dengan itu saya telah membuat .bashrc
file dan menautkannya dari .bash_profile
pada Mac saya, karena ternyata tidak ada secara default. Saya sebelumnya pernah membaca tentang sistem Linux yang, menurut konvensi, .bash_profile
bagus untuk beberapa penyesuaian, dan .bashrc
bagus untuk yang lain seperti mendefinisikan alias pengguna dan fungsi, atau sebaliknya. Jadi saya tidak terbiasa melihat ke dalam .bash_profile
file, dan terutama bukan .profile
file, semua ada di direktori pengguna, yang juga disalin oleh sistem serupa. Mari kita juga jangan lupa a path_helper
is in the mix (!), Tetapi sepertinya tidak berkontribusi pada masalah.
Cara-cara yang mungkin untuk mengatur lingkungan, yang mungkin benar atau tidak, adalah sebagai berikut:
Keterangan lebih lanjut
Untuk verbositas yang lebih luar biasa, berikut adalah beberapa contoh jalur yang saya ambil di antara berbagai lingkungan saat men-debug masalah:
PATH ikan asli (rusak)
/Pengguna/nama pengguna/.rvm/gems/ruby-2.0.0-p648/bin / Pengguna / pengguna/.rvm/gems/ruby-2.0.0-p648@global/bin / Pengguna / pengguna/.rvm/rubies/ ruby-2.0.0-p648 / bin / Pengguna / nama pengguna /.rvm/bin / usr / lokal / bin / usr / bin / usr / sbin / sbin / usr / lokal / munki / Pengguna / pengguna / usr / usr tempat sampah
PATH ikan 'Alami' yang lebih baik
/ usr / local / opt / coreutils / libexec / gnubin / usr / local / opt / findutils / bin / usr / lokal / bin / usr / bin / bin / usr / sbin / sbin / usr / lokal / munki
PATH bash asli (rusak)
/libexec/gnubin:/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648/bin /Users/username/.rvm/gems/ruby-2.0.0-p648@global/bin / Users /username/.rvm/rubies/ruby-2.0.0-p648/bin / Pengguna / username/.rvm/bin / usr / local / bin / usr / bin / usr / sbin / sbin / usr / local / munki : /Users/username/.rvm/bin
Memperbaiki bash PATH 'Manual'
/libexec/gnubin:/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648@global/bin: / Pengguna / nama pengguna /.rvm/rubies/ruby-2.0.0-p648/bin:/Users/username/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin: /sbin:/usr/local/munki:/Users/username/.rvm/bin:/Users/username/.rvm/bin
'Secara alami' lebih baik bash PATH
/ usr / local / opt / coreutils / libexec / gnubin: / usr / local / opt / findutils / bin: / usr / local / opt / coreutils / libexec / gnubin: / usr / local / opt / findutils / bin: / usr / local / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / munki
Catatan:
- Dokumen asli berasal dari memulai lingkungan baru di salah satu interpreter baris perintah sambil mengalami masalah.
- 'Manual' ini tentu saja ketika saya mengambil string jalur yang salah, memperbaiki kesalahan sintaks, dan melihat operasi penerjemah yang lebih tepat, jadi saya tahu apa yang diharapkan ketika terus memperbaiki akar penyebabnya.
- The 'alami berasal dari ketika saya pertama kali melewatkan memuat file-file konfigurasi lingkungan terminal saya seperti
.bashrc
dan seterusnya, dan akhirnya mereka menjalankannya setelah masalah terpecahkan.
shell_session_update
adalah fungsi Bash yang diinstal oleh OS X di/etc/bashrc_Apple_Terminal
, jadi mungkin sesuatu dalam perintah Bash yang dijalankan RVM memproduksinya sebagai output.