เหตุใดฉันจึงมี / ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร:“ shell_session_update: ไม่พบคำสั่ง”


24

พื้นหลัง

ฉันเข้าสู่ Ruby 2.x และ Rails 4.x บน MacBook โดยใช้ OS X El Capitan (10.11.3) โดยใช้ fish shell ใช้การรวมที่แสดงรายการในหน้านี้: RVM - Fish Shell (Integration)

ปัญหา

เมื่อรันคำสั่งต่างๆเช่นrvm version, rvm install ..., rvm use ..., rvm --default ...ฯลฯ ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

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

การค้นหาอย่างรวดเร็วของ Google ไม่ส่งคืนผลลัพธ์ที่เกี่ยวข้องใด ๆ ที่จะช่วยให้ฉันระบุและ / หรือแก้ไขปัญหาดังที่ได้ทำงานกับปัญหาการตั้งค่าการพัฒนาอื่น ๆ ของฉัน

ฉันค้นหาข้อความด่วนในrvm.fishไฟล์ฟังก์ชั่นภายใต้.config/fishไดเรกทอรีและยังอยู่ใน$HOME/.rvm/bin/rvmไฟล์ปฏิบัติการหลักและไม่เห็นคำสั่งเช่นshell_session_updateถูกเรียกโดยตรงในไฟล์นั้น

คำถาม

ไม่มีใครรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร ฉันเป็นคนที่ชอบแก้ไขสิ่งต่าง ๆ ต่อหน้าฉันดังนั้นสิ่งที่ฉันจำเป็นต้องดำเนินการปรากฏต่อหน้าฉันดังนั้นฉันต้องการลบข้อผิดพลาด / ข้อความเตือนนี้ :)

PS รุ่น Ruby เฉพาะ (2.0.0) ที่ฉันพยายามติดตั้งและใช้ดูเหมือนว่าจะทำงานได้อย่างเหมาะสมแม้จะอยู่ในเซสชันเทอร์มินัล (iTerm (2)) เดียวกันโดยไม่ต้องรีสตาร์ท ฉันได้ปิดไปแล้วและสร้างเทอร์มินัลเซสชันใหม่และยังคงเห็นข้อความปรากฏขึ้นเมื่อใช้คำสั่งต่าง ๆ ดังกล่าว


shell_session_updateเป็นฟังก์ชั่น Bash ที่ติดตั้งโดย OS X /etc/bashrc_Apple_Terminalดังนั้นอาจมีบางอย่างในคำสั่ง Bash ที่ RVM รันทำออกมาเป็นเอาต์พุต
Zanchey

คำตอบ:


41

TL; DR: ตรวจสอบให้แน่ใจว่า RVM เป็นรุ่นล่าสุดจนถึงอย่างน้อย 1.26.11 โดยการติดตั้งใหม่หรือออกคำสั่งrvm get headและจะเริ่มต้นได้หนึ่งครั้งต่อสภาพแวดล้อมเทอร์มินัล

ผล

ในที่สุดฉันก็สามารถแก้ไขสภาพแวดล้อมของฉัน ฉันจะโพสต์ข้อมูลบางอย่างเกี่ยวกับปัญหาเฉพาะของฉันในความพยายามที่จะช่วยเหลือบางอย่างแม้ว่าคนอื่นอาจมีอาการเหมือนกัน แต่มีสาเหตุอื่น

สาเหตุ

ส่วนหนึ่งของปัญหารากมาจาก RVM และวิธีการเริ่มต้นสำหรับสภาพแวดล้อมบรรทัดคำสั่งของฉัน ฉันได้พบวิธีที่แตกต่างกันสองสามอย่างโดยเฉพาะอย่างยิ่งเนื่องจากวิธีพิเศษหนึ่งวิธีถูกสร้างขึ้นมาโดยเฉพาะสำหรับfishสภาพแวดล้อมของเชลล์

ดูเหมือนว่าสาเหตุที่แท้จริงคือ:

  • การเริ่มต้น RVM มากกว่าหนึ่งครั้งเนื่องจากฉันมีหลายข้อความสั่งหนึ่งรายการต่อไฟล์การกำหนดค่าเทอร์มินัลและเนื่องจากวิธีที่พวกเขาถูกล่ามโซ่ฉันจึงไม่ตระหนักถึงผู้อื่นที่ถูกเพิ่มโดยอัตโนมัติ
  • หรืออย่างใดงบเพิ่มที่ผสมการเริ่มต้นสำหรับสภาพแวดล้อมที่ขั้วหนึ่งพูดfishและกำลังถูกเรียกใช้ในสภาพแวดล้อมที่สถานีอื่น ๆ ของฉันbashหรือในทางกลับกัน นี้สามารถเห็นได้ในรายละเอียดด้านล่างของฉันที่เสียbashPATH มีบางส่วนของเส้นทางที่คั่นด้วย:s แต่แล้วคนอื่น ๆ ยังรวมถึงด้วยช่องว่างซึ่งเป็นไวยากรณ์ไม่ถูกต้องสำหรับแต่ที่ถูกต้องสำหรับbashfish
  • หรือทั้งคู่กำลังเกิดขึ้น!

จากนั้นอีกส่วนหนึ่งของปัญหารากก็คือดูเหมือนว่ามีข้อผิดพลาดที่เกี่ยวข้องกับ RVM / direnv พุ่งขึ้นเมื่อเร็ว ๆ นี้เกี่ยวกับฟังก์ชั่นกับดัก ฉันอาจพบปัญหานี้อีกครั้งโดยการเผยแพร่ RVM ที่เป็นปัญหาอย่างอื่นซึ่งอาจเกิดจาก:

  • การติดตั้งใหม่: curl -sSL https://get.rvm.io | bash
  • การอัปเดตด้วยตนเอง: rvm get head
  • การปรับปรุงอัตโนมัติ (ที่ฉันได้ทำเพียงแค่) โดยการเพิ่มrvm_autoupdate_flag=2การ~/.rvmrc

ปัญหานี้ควรได้รับการแก้ไข ณ วันที่ 30 มีนาคม 2559 หรือเผยแพร่ 1.26.11:

เรื่องราว

หลังจากต่อสู้กับยูทิลิตี้ GNU เพื่อทำการค้นหาที่สมบูรณ์ของระบบไฟล์โดยมองเข้าไปในเนื้อหาของไฟล์ฉันใช้ Atom เพื่อทำสิ่งนี้ให้ประสบความสำเร็จมากขึ้นและพบว่ามีการค้นพบสิ่งเดียวที่เกิดขึ้นshell_session_updateใน/etc/bashrc_Apple_Terminalไฟล์ที่ Zanchey พูดถึง และเช่น). ฉันยังไม่แน่ใจว่าทำไมที่ถูกเรียกใช้เพราะผมใช้ iTerm (2) และความคุ้มค่าของ$TERM_PROGRAMในกรณีที่เป็นและไม่ได้iTerm.appApple_Terminal

มันก็ไม่ได้ช่วยฉันด้วยเหตุผลบางอย่างต้องจัดการการติดตั้ง RVM มากกว่าหนึ่งครั้งต้องผ่านกระบวนการติดตั้งซึ่งเพิ่มการกำหนดค่าให้กับ 'dotfiles' หลายตัวอยู่แล้วซึ่งฉันได้เพิ่มบางส่วนหรือด้วยตนเองลงไปด้วย .

พร้อมกับที่ฉันได้ทำ.bashrcไฟล์และเชื่อมโยงกับมันจาก.bash_profileบน Mac ของฉันเพราะเห็นได้ชัดว่ามันไม่ได้อยู่โดยค่าเริ่มต้น ก่อนหน้านี้ฉันเคยอ่านบนระบบ Linux ว่าโดยการประชุม.bash_profileนั้นดีสำหรับการปรับแต่งบางอย่างและ.bashrcดีต่อผู้อื่นเช่นการกำหนดนามแฝงของผู้ใช้และฟังก์ชั่นหรือในทางกลับกัน ดังนั้นฉันจึงไม่คุ้นเคยกับการดู.bash_profileไฟล์ภายในและโดยเฉพาะอย่างยิ่งไม่ใช่.profileไฟล์ทั้งหมดในไดเรกทอรีผู้ใช้ซึ่งระบบที่คล้ายกันก็อปปี้เช่นกัน อย่าลืมว่า a path_helperอยู่ในส่วนผสม (!) แต่ดูเหมือนจะไม่ได้มีส่วนช่วยแก้ไขปัญหาใด ๆ

วิธีที่เป็นไปได้ในการตั้งค่าสภาพแวดล้อมที่อาจถูกต้องหรือไม่นั้นมีดังนี้:

รายละเอียดเพิ่มเติม

สำหรับคำฟุ่มเฟื่อยที่น่าทึ่งมากขึ้นนี่คือตัวอย่างเส้นทางที่ฉันจับระหว่างสภาพแวดล้อมที่แตกต่างกันในขณะที่การดีบักปัญหา:

เส้นทางปลา (แตก) ดั้งเดิม

/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 / ผู้ใช้ / username/.rvm/bin / usr / local / bin / usr / bin / bin / usr / sbin / sbin / usr / local / munki / ผู้ใช้ / username/.rvm/ ถัง

เส้นทางธรรมชาติของปลาที่ดีกว่า

/ usr / local / opt / coreutils / libexec / gnubin / usr / local / opt / findutils / bin / usr / local / bin / usr / bin / bin / usr / sbin / usr / local / munki

เส้นทางทุบตีดั้งเดิม (แตก)

/libexec/gnubin:/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648/bin /Users/username/.rvm/gems/ruby-2.0.0-p648@global/bin / ผู้ใช้ /username/.rvm/rubies/ruby-2.0.0-p648/bin / ผู้ใช้ / username/.rvm/bin / usr / local / bin / usr / bin / usr / sbin / usbin / local / munki : /Users/username/.rvm/bin

'ด้วยตนเอง' แก้ไขเส้นทางทุบตี

/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:/Users/username/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin: /sbin:/usr/local/munki:/Users/username/.rvm/bin:/Users/username/.rvm/bin

'ธรรมชาติ' ดีกว่าทุบตีเส้นทาง

/ 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

หมายเหตุ:

  • 'ต้นฉบับมาจากการเริ่มต้นสภาพแวดล้อมใหม่ในล่ามบรรทัดคำสั่งทั้งสองในขณะที่มีปัญหา
  • 'คู่มือ' แน่นอนเมื่อฉันใช้สตริงเส้นทางที่ไม่ถูกต้องแก้ไขข้อผิดพลาดทางไวยากรณ์และเห็นการทำงานที่เหมาะสมมากขึ้นของล่ามดังนั้นฉันจึงรู้ว่าจะต้องคาดหวังอะไรเมื่อดำเนินการแก้ไขสาเหตุที่แท้จริง
  • 'ธรรมชาติมาจากเมื่อฉันข้ามการโหลดไฟล์การกำหนดค่าสภาพแวดล้อมของเทอร์มินัลเป็นครั้งแรก.bashrcและต่อจากนั้นในที่สุดก็ให้พวกเขาทำงานหลังจากปัญหาได้รับการแก้ไข

rvm get headจากนั้นrvm reinstall {version}สำหรับแต่ละรุ่นก็มาซ่อมให้ฉันด้วย
TomFuertes

1
หากใช้วิธีการติดตั้ง curl:curl -sSL https://get.rvm.io | bash -s head --ruby
rynop

คำตอบนี้คือทองคำ มีประโยชน์และทั่วถึง
TehShrike

ฉันมี "ปัญหา" นี้หลังจากติดตั้ง bash-git-prompt ติดตั้ง RVM ดูเหมือนnaaah มากเกินไป ดังนั้นผมเพิ่งย้ายไปยังจุดสิ้นสุดในของฉัน<rvm sourcing line> .bash_profileคงที่
โฆษณา

ฉันมักจะพบว่าแก้ไขข้อความแสดงข้อผิดพลาดอื่น ๆ อ้างอิงที่นี่: stackoverflow.com/questions/18276701/… “ คำเตือน! ติดตั้ง PATH ไม่ถูกต้อง” บางทีคุณอาจมีสายการผลิตอื่นที่จะทำให้คล้ายกับปัญหานี้มากกว่า นั่นคงไม่สมเหตุสมผล แต่ก็เป็นไปได้
Pysis

5

ฉันก็มีปัญหาเดียวกัน ต่อมาฉันพบว่ามีปัญหาอยู่ใน rvm repo สำหรับสิ่งนี้ และพวกเขาได้แก้ไขมันในหนึ่งในคำขอดึง

ในการแก้ไขปัญหานี้ให้อัพเกรด rvm เป็นเวอร์ชันล่าสุดหรือชี้ไปที่การแก้ไขเพื่อการพัฒนาปัจจุบัน

rvm get head

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่โพสต์นี้


1
คุณสามารถอ้างอิงส่วนที่เกี่ยวข้องจากลิงค์ได้หรือไม่? มิฉะนั้นดูเหมือนว่าคุณกำลังพยายามโปรโมตบล็อกของคุณเอง
Burgi

สิ่งนี้ใช้ไม่ได้ใน travis โปรดดูgithub.com/travis-ci/travis-ci/issues/9511
timotheecour
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.