Warum habe ich / wie kann ich diesen Fehler beheben: "shell_session_update: Befehl nicht gefunden"


24

Hintergrund

Ich erreiche Ruby 2.x und Rails 4.x auf einem MacBook unter OS X El Capitan (10.11.3) mithilfe der auf dieser Seite aufgelisteten Integration: RVM - Fish Shell (Integration)

Problem

Wenn verschiedene Befehle ausführen , wie beispielsweise rvm version, rvm install ..., rvm use ..., rvm --default ...usw., erhalten I die folgende Fehlermeldung:

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

Die schnelle Google-Suche gibt keine verwandten Ergebnisse zurück, anhand derer ich das Problem identifizieren und / oder beheben kann, wie dies bei vielen meiner anderen Probleme bei der Einrichtung der Entwicklung der Fall war.

Ich habe eine schnelle Textsuche in der rvm.fishFunktionsdatei, im .config/fishVerzeichnis und auch in der $HOME/.rvm/bin/rvmausführbaren Hauptdatei durchgeführt und keinen Befehl gefunden shell_session_update, der direkt in dieser Datei aufgerufen wurde.

Frage

Weiß jemand, warum dies geschieht und wie ich es beheben kann? Ich bin eine Person, die gerne die Dinge vor mir repariert, sodass nur die Dinge vor mir angezeigt werden, auf die ich reagieren muss. Daher möchte ich diese Fehler- / Warnmeldung entfernen. :)

PS Eine bestimmte Ruby-Version (2.0.0), die ich zu installieren und zu verwenden versuchte, scheint auch in derselben Terminal-Sitzung (iTerm (2)) ordnungsgemäß zu funktionieren, ohne sie neu starten zu müssen. Ich habe diese Sitzung geschlossen und eine neue Terminalsitzung erstellt. Die Meldung wird weiterhin angezeigt, wenn die verschiedenen oben genannten Befehle ausgeführt werden.


shell_session_updateist eine Bash-Funktion, die von OS X installiert wurde. /etc/bashrc_Apple_TerminalVermutlich wird sie in den Bash-Befehlen, die RVM ausführt, als Ausgabe erzeugt.
Zanchey

Antworten:


41

TL; DR: Stellen Sie sicher, dass RVM auf mindestens 1.26.11 aktuell ist, indem Sie den Befehl erneut installieren oder ausgeben. Die rvm get headInitialisierung erfolgt nur einmal pro Terminalumgebung.

Ergebnis

Schließlich konnte ich meine Umgebung reparieren. Ich werde einige Informationen zu meinem spezifischen Problem veröffentlichen, um einigen zu helfen, auch wenn andere das gleiche Symptom haben, aber eine andere Ursache.

Ursache

Ein Teil des Root-Problems stammte von RVM und davon, wie es für meine Befehlszeilenumgebungen initialisiert wurde. Ich hatte ein paar verschiedene Möglichkeiten gefunden, um dies zu tun, zumal eine zusätzliche Methode speziell für die fishShell-Umgebung entwickelt wurde.

Es scheint, die Grundursache war entweder:

  • RVM wurde mehr als einmal initialisiert, da ich mehrere Anweisungen hatte, eine pro Terminalkonfigurationsdatei, und weil sie verkettet waren, waren mir die anderen nicht bekannt, die automatisch hinzugefügt wurden.
  • Oder es wurden Anweisungen hinzugefügt, die beispielsweise die Initialisierung für eine Terminalumgebung vermischten fishund in meiner anderen Terminalumgebung ausgeführt bashwurden oder umgekehrt. Dies ist in meinen Details unten zu sehen, in denen der unterbrochene bashPFAD einige der durch :s begrenzten Pfade enthält , andere jedoch auch durch Leerzeichen. Dies ist eine falsche Syntax bash, die jedoch korrekt ist fish.
  • Oder beides geschah!

Dann war der andere Teil des Grundproblems, dass es den Anschein hat, als ob sich kürzlich ein Fehler im Zusammenhang mit RVM / direnv in Bezug auf die Trap-Funktion eingeschlichen hat. Wahrscheinlich bin ich wieder auf dieses Problem gestoßen, als ich eine der anderen problematischen Versionen von RVM hatte, die folgende Ursachen haben könnten:

  • Eine Neuinstallation: curl -sSL https://get.rvm.io | bash
  • Ein manuelles Update: rvm get head
  • Ein automatisches Update (das ich gerade gemacht hatte) durch Hinzufügen rvm_autoupdate_flag=2zu~/.rvmrc

Dieses Problem sollte ab dem 30. März 2016 oder Release 1.26.11 behoben sein:

Die Geschichte

Nachdem ich mit den GNU-Dienstprogrammen gekämpft hatte, um eine vollständige Suche im Dateisystem durchzuführen, und einen Blick shell_session_updatein den /etc/bashrc_Apple_TerminalDateiinhalt geworfen hatte , benutzte ich Atom, um dies erfolgreicher zu machen, und stellte fest, dass das einzige Vorkommen von in der von Zanchey erwähnten Datei gefunden wurde (neben Verlaufsdateien) und derartige). Ich bin mir auch nicht sicher, warum das ausgeführt wurde, weil ich iTerm (2) verwendet habe und der Wert von $TERM_PROGRAMin diesem Fall ist iTerm.appund nicht Apple_Terminal.

Es hat auch nicht geholfen, dass ich aus irgendeinem Grund die RVM-Installation mehr als einmal verwalten musste, indem ich den Installationsprozess durchlief, der anscheinend bereits mehreren 'Punktedateien' Konfiguration hinzufügte, wobei ich auch einige oder die Zeilen manuell hinzugefügt hatte .

Außerdem hatte ich eine .bashrcDatei erstellt und von .bash_profilemeinem Mac aus darauf verlinkt , da sie anscheinend nicht standardmäßig vorhanden war. Ich hatte zuvor auf einem Linux-System gelesen, dass sich per Konvention .bash_profilefür einige Anpassungen und .bashrcfür andere wie das Definieren von Benutzer-Aliasen und -Funktionen oder umgekehrt eignet. Daher war ich es nicht gewohnt, in die .bash_profileDatei und insbesondere nicht in die .profileDatei zu schauen , die sich alle im Benutzerverzeichnis befanden, das vom ähnlichen System ebenfalls kopiert wurde. Vergessen wir auch nicht, dass a path_helperim Mix ist (!), Aber anscheinend zu keinen Problemen beigetragen hat.

Es gibt folgende Möglichkeiten, die Umgebung einzurichten, die korrekt sein kann oder nicht:

Mehr Details

Im Folgenden sind einige Beispiele aufgeführt, die ich beim Debuggen des Problems zwischen verschiedenen Umgebungen aufgenommen habe:

Ursprünglicher (gebrochener) Fisch PFAD

/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/ Behälter

"Natürlich" besser fischen PATH

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

Ursprünglicher (gebrochener) Bash-Pfad

/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

'Manuell' Bash-Pfad korrigiert

/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

"Natürlich" besser 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

Anmerkungen:

  • Bei den Originalen ging es darum, die brandneue Umgebung in einem der beiden Befehlszeileninterpreter zu starten, während das Problem auftrat.
  • Das 'Handbuch' ist natürlich, wenn ich die falsche Pfadzeichenfolge genommen, die Syntaxfehler behoben und eine bessere Funktionsweise des Interpreters festgestellt habe, sodass ich wusste, was zu erwarten ist, wenn ich die Grundursache weiterhin behebe.
  • Die natürlichen Dateien stammen aus der Zeit, als ich das Laden der Konfigurationsdateien für die Terminalumgebung (z. B. .bashrcusw.) übersprungen habe und sie schließlich ausgeführt haben, nachdem das Problem behoben wurde.

rvm get headund dann rvm reinstall {version}für jede Version für mich
fixiert

1
Wenn Sie die Curl-Installationsmethode verwenden:curl -sSL https://get.rvm.io | bash -s head --ruby
rynop

Diese Antwort ist Gold. Nützlich und gründlich.
TehShrike

Ich hatte dieses "Problem" nach der Installation von bash-git-prompt. Die Neuinstallation von rvm schien naaah zu viel . Also bin ich einfach <rvm sourcing line>ans Ende meiner Karriere gegangen .bash_profile. Fest.
AD

Ich habe normalerweise festgestellt, dass diese andere Fehlermeldung behoben wurde, auf die hier verwiesen wird : stackoverflow.com/questions/18276701/… “Warning! PATH ist nicht richtig eingerichtet. “Vielleicht hatten Sie anderswo Sourcing-Linien, die es diesem Problem ähnlicher machen würden? Das würde keinen Sinn ergeben, aber alles ist möglich.
Pysis

5

Ich hatte auch das gleiche Problem. Später stellte ich fest, dass hierfür bereits ein Problem in rvm repo vorhanden ist. Und sie haben es in einer der Pull-Anfragen behoben.

Um dies zu beheben, aktualisieren Sie entweder den rvm auf die neueste Version oder verweisen Sie auf die aktuelle Entwicklungsversion.

rvm get head

Weitere Details finden Sie in diesem Beitrag .


1
Könnten Sie die relevanten Teile aus dem Link zitieren? Ansonsten sieht es so aus, als würden Sie versuchen, Ihr eigenes Blog zu promoten.
Burgi

Dies funktioniert nicht in Travis, siehe github.com/travis-ci/travis-ci/issues/9511
timotheecour
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.