Mengapa saya memiliki / bagaimana saya bisa memperbaiki kesalahan ini: "shell_session_update: command not found"

24

Latar Belakang

Saya masuk ke Ruby 2.x, dan Rails 4.x, di MacBook menggunakan OS X El Capitan (10.11.3), menggunakan shell ikan, menggunakan integrasi yang tercantum di halaman ini: RVM - Shell Ikan (Integrasi)

Masalah

Ketika menjalankan berbagai perintah seperti rvm version, rvm install ..., rvm use ..., rvm --default ..., dll, saya menerima pesan galat berikut:

/var/folders/2w/zhgybz7d25s1gdy41qdxwp48001gfh/T/rvm.fish.Pqd0CuZRJW: shell_session_update: command not found

Pencarian cepat Google tidak menghasilkan hasil terkait yang akan membantu saya mengidentifikasi dan / atau memperbaiki masalah, seperti yang telah bekerja untuk banyak masalah pengaturan pengembangan saya yang lain.

Saya melakukan pencarian teks cepat di rvm.fishfile fungsi, di bawah .config/fishdirektori, dan juga di dalam $HOME/.rvm/bin/rvmexecutable utama, dan tidak melihat perintah seperti shell_session_updatedipanggil langsung di file itu.

Pertanyaan

Adakah yang tahu mengapa ini terjadi, dan bagaimana saya bisa memperbaikinya? Saya adalah orang yang suka memperbaiki hal-hal yang ada di depan saya, sehingga hanya hal-hal yang perlu saya lakukan yang muncul di depan saya, jadi saya ingin menghapus pesan kesalahan / peringatan ini. :)

PS Versi Ruby tertentu (2.0.0) yang saya coba instal dan gunakan, tampaknya berfungsi dengan baik, bahkan dalam sesi terminal yang sama (iTerm (2)), tanpa harus memulai ulang. Sejak itu saya menutupnya dan telah membuat sesi terminal baru, dan masih melihat pesan muncul ketika menjalankan berbagai perintah yang disebutkan di atas.

Pisis
sumber
shell_session_updateadalah fungsi Bash yang diinstal oleh OS X di /etc/bashrc_Apple_Terminal, jadi mungkin sesuatu dalam perintah Bash yang dijalankan RVM memproduksinya sebagai output.
Zanchey

Jawaban:

41

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 fishlingkungan 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 bashPATH 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=2ke~/.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_updateditemukan dalam /etc/bashrc_Apple_Terminalfile yang disebutkan oleh Zanchey (selain file sejarah dan seperti). Saya juga tidak yakin mengapa itu dijalankan karena saya menggunakan iTerm (2), dan nilai $TERM_PROGRAMdalam hal ini adalah iTerm.appdan 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 .bashrcfile dan menautkannya dari .bash_profilepada Mac saya, karena ternyata tidak ada secara default. Saya sebelumnya pernah membaca tentang sistem Linux yang, menurut konvensi, .bash_profilebagus untuk beberapa penyesuaian, dan .bashrcbagus untuk yang lain seperti mendefinisikan alias pengguna dan fungsi, atau sebaliknya. Jadi saya tidak terbiasa melihat ke dalam .bash_profilefile, dan terutama bukan .profilefile, semua ada di direktori pengguna, yang juga disalin oleh sistem serupa. Mari kita juga jangan lupa a path_helperis 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 .bashrcdan seterusnya, dan akhirnya mereka menjalankannya setelah masalah terpecahkan.
Pisis
sumber
rvm get headdan kemudian rvm reinstall {version}untuk setiap versi akhirnya diperbaiki untuk saya
TomFuertes
1
Jika menggunakan metode instal curl:curl -sSL https://get.rvm.io | bash -s head --ruby
rynop
Jawaban ini adalah emas. Berguna dan teliti.
TehShrike
Saya punya "masalah" ini setelah menginstal bash-git-prompt. Menginstal ulang rvm sepertinya terlalu banyak . Jadi saya baru saja pindah <rvm sourcing line>ke ujung di saya .bash_profile. Tetap.
AD
Saya biasanya menemukan bahwa memperbaiki pesan kesalahan ini dirujuk di sini: stackoverflow.com/questions/18276701/… “Warning! PATH tidak diatur dengan benar ”Mungkin Anda memiliki jalur sumber di tempat lain yang akan membuatnya lebih mirip dengan masalah ini? Itu tidak masuk akal, tetapi apa pun mungkin terjadi.
Pysis
5

Saya juga punya masalah yang sama. Kemudian saya menemukan bahwa sudah ada masalah dalam rvm repo untuk ini. Dan mereka telah memperbaikinya di salah satu permintaan tarik.

Untuk memperbaikinya, perbarui rvm ke versi terbaru atau arahkan ke revisi pengembangan saat ini.

rvm get head

Untuk lebih jelasnya lihat posting ini .

Ajit Singh
sumber
1
Bisakah Anda mengutip bagian yang relevan dari tautan? Kalau tidak, sepertinya Anda sedang mencoba mempromosikan blog Anda sendiri.
Burgi
ini tidak berfungsi di travis, lihat github.com/travis-ci/travis-ci/issues/9511
timotheecour