Dlaczego mam / jak mogę naprawić ten błąd: „shell_session_update: nie znaleziono polecenia”


24

tło

Wchodzę w Ruby 2.xi Rails 4.x na MacBooku, używając OS X El Capitan (10.11.3), używając powłoki rybnej, używając integracji wymienionej na tej stronie: RVM - Fish Shell (Integracja)

Problem

Podczas wykonywania różnych poleceń, takich jak rvm version, rvm install ..., rvm use ..., rvm --default ..., itd, otrzymuję następujący komunikat o błędzie:

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

Szybkie wyszukiwanie w Google nie zwraca żadnych powiązanych wyników, które pomogłyby mi zidentyfikować i / lub naprawić problem, co zadziałało w przypadku wielu innych problemów związanych z konfiguracją oprogramowania.

Przeprowadziłem szybkie wyszukiwanie tekstu w rvm.fishpliku funkcji, w .config/fishkatalogu, a także w $HOME/.rvm/bin/rvmgłównym pliku wykonywalnym, i nie widziałem polecenia takiego jak shell_session_updatewywołanie bezpośrednio w tym pliku.

Pytanie

Czy ktoś wie, dlaczego tak się dzieje i jak mogę to naprawić? Jestem osobą, która lubi naprawiać przede mną rzeczy, aby tylko te rzeczy, które muszę podjąć, pojawiają się przede mną, dlatego chcę usunąć ten komunikat o błędzie / ostrzeżeniu. :)

PS Wydaje się, że konkretna wersja Ruby (2.0.0), którą próbowałem zainstalować i używać, działa poprawnie, nawet w tej samej sesji terminala (iTerm (2)), bez konieczności jej restartowania. Od tego czasu ją zamknąłem i utworzyłem nową sesję terminala i nadal widzę komunikat pojawiający się podczas uruchamiania różnych wyżej wymienionych poleceń.


shell_session_updatejest funkcją Bash zainstalowaną przez OS X /etc/bashrc_Apple_Terminal, więc prawdopodobnie coś w komendach Bash, które uruchamia RVM, wytwarza ją jako wynik.
Zanchey

Odpowiedzi:


41

TL; DR: Upewnij się, że RVM jest aktualny do wersji co najmniej 1.26.11, ponownie instalując lub wydając polecenie rvm get head, i jest inicjowany tylko raz na środowisko terminala.

Wynik

W końcu udało mi się naprawić moje środowisko. Zamierzam opublikować pewne informacje dotyczące mojego konkretnego problemu, starając się pomóc niektórym, nawet jeśli inni mogą mieć ten sam objaw, ale inną podstawową przyczynę.

Przyczyna

Jedna część problemu root pochodziła z RVM i jak została zainicjowana dla moich środowisk wiersza poleceń. Znalazłem kilka różnych sposobów, aby to zrobić, zwłaszcza, że ​​stworzono jedną dodatkową metodę dla fishśrodowiska powłoki.

Wydaje się, że główną przyczyną była albo:

  • inicjowanie RVM więcej niż jeden raz, ponieważ miałem wiele instrukcji, po jednej na plik konfiguracyjny terminala, a ze względu na sposób ich łączenia, nie wiedziałem o innych, które zostały automatycznie dodane.
  • Lub, w jakiś sposób, dodano instrukcje, które mieszały inicjację dla jednego środowiska terminalowego, powiedzmy fish, i były uruchamiane w moim innym środowisku terminalowym bash, lub odwrotnie. Można to zobaczyć w moich szczegółach poniżej, gdzie zepsuta bashŚCIEŻKA ma niektóre ścieżki ograniczone przez :s, ale inne zawierają również spacje, co jest niepoprawną składnią bash, ale poprawną dla fish.
  • Albo oboje się zdarzali!

Następnie drugą częścią problemu root było to, że wydaje się, że błąd związany z RVM / direnv pojawił się ostatnio w związku z funkcją pułapki. Prawdopodobnie spotkałem się z tym ponownie, mając jedną z innych problematycznych wersji RVM, które mogły być spowodowane przez:

  • Ponowna instalacja: curl -sSL https://get.rvm.io | bash
  • Aktualizacja ręczna: rvm get head
  • Automatyczna aktualizacja (którą właśnie wykonałem) poprzez dodanie rvm_autoupdate_flag=2do~/.rvmrc

Ten problem powinien zostać rozwiązany od 30 marca 2016 r. Lub w wersji 1.26.11:

Historia

Po walce z narzędziami GNU, aby przeprowadzić pełne wyszukiwanie systemu plików, zaglądając do zawartości pliku, użyłem Atomu, aby osiągnąć większy sukces, i odkryłem, że jedyne wystąpienie shell_session_updateznaleziono w /etc/bashrc_Apple_Terminalpliku wspomnianym przez Zancheya (oprócz plików historii oraz taki). Nie jestem również pewien, dlaczego to było uruchamiane, ponieważ korzystałem z iTerm (2), a wartość $TERM_PROGRAMw tym przypadku jest iTerm.appi nie Apple_Terminal.

Nie pomogło mi również to, że z jakiegoś powodu musiałem zarządzać instalacją RVM więcej niż raz, przechodząc przez proces instalacji, który najwyraźniej dodaje już konfigurację do kilku „plików dot”, w których również ręcznie dodałem niektóre lub wiersze .

Oprócz tego utworzyłem .bashrcplik i podlinkowałem go z .bash_profilemojego komputera Mac, ponieważ najwyraźniej domyślnie nie istniał. Wcześniej czytałem na temat systemu Linux, który zgodnie z konwencją .bash_profilejest dobry dla niektórych dostosowań i .bashrcjest dobry dla innych, takich jak definiowanie aliasów i funkcji użytkownika lub odwrotnie. Nie byłem więc przyzwyczajony do zaglądania do .bash_profilepliku, a zwłaszcza do .profilepliku, wszystko w katalogu użytkownika, który również kopiuje podobny system. Nie zapominajmy też, że a path_helperjest w miksie (!), Ale wydaje się, że nie przyczynia się do żadnych problemów.

Możliwe sposoby skonfigurowania środowiska, które mogą być poprawne lub nie, są następujące:

Więcej szczegółów

Aby uzyskać bardziej niewiarygodną szczegółowość, oto kilka przykładowych ścieżek przechwyconych przez różne środowiska podczas debugowania problemu:

Oryginalna (łamana) ŚCIEŻKA ryb

/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/ kosz

„Naturalnie” lepsza ŚCIEŻKA dla ryb

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

Oryginalna (zepsuta) ŚCIEŻKA bashu

/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

„Ręcznie” Naprawiono ścieżkę bash

/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

„Naturalnie” lepsza ŚCIEŻKA uderzenia

/ 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

Uwagi:

  • „Oryginały” pochodziły od uruchomienia zupełnie nowego środowiska w dowolnym z interpreterów wiersza poleceń, mając problem.
  • „Podręcznik” jest oczywiście wtedy, gdy wziąłem niepoprawny ciąg ścieżki, naprawiłem błędy składniowe i zobaczyłem poprawniejsze działanie interpretera, więc wiedziałem, czego się spodziewać, gdy będę kontynuować naprawianie pierwotnej przyczyny.
  • Naturalne były od momentu, gdy po raz pierwszy pominąłem ładowanie plików konfiguracyjnych środowiska terminalowego, takich jak .bashrci tak dalej, a potem ostatecznie je uruchomiłem po rozwiązaniu problemu.

rvm get heada potem rvm reinstall {version}dla każdej wersji kończyło się dla mnie
naprawianie

1
Jeśli używasz metody instalacji curl:curl -sSL https://get.rvm.io | bash -s head --ruby
rynop

Ta odpowiedź jest złota. Przydatne i dokładne.
TehShrike,

Miałem ten „problem” po zainstalowaniu bash-git-prompt. Ponowna instalacja rvm wydawała się zbyt naaah . Właśnie przeszedłem <rvm sourcing line>do końca w moim .bash_profile. Naprawiony.
AD

Zwykle stwierdziłem, że naprawiłem ten inny komunikat o błędzie, o którym mowa tutaj: stackoverflow.com/questions/18276701/… „Uwaga! ŚCIEŻKA nie jest właściwie skonfigurowana ”. Może miałeś gdzieś inne źródła, które by bardziej przypominały ten problem? To nie miałoby sensu, ale wszystko jest możliwe.
Pysis

5

Ja też miałem ten sam problem. Później odkryłem, że w repozytorium rvm występuje już problem. I naprawili to w jednym z żądań ściągnięcia.

Aby to naprawić, zaktualizuj RVM do najnowszej wersji lub wskaż bieżącą wersję rozwojową.

rvm get head

Więcej informacji można znaleźć w tym poście .


1
Czy możesz podać odpowiednie części z linku? W przeciwnym razie wygląda to tak, jakbyś próbował promować własny blog.
Burgi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.