web-dev-qa-db-ja.com

なぜ私はこのエラーを持っていますか/どのように修正できますか: "Shell_session_update:command not found"

バックグラウンド

Ruby 2.x、およびRails 4.x、OS X El Capitan(10.11.3)を使用するMacBookで、魚を使用してこのページにリストされている統合を採用したシェル: RVM-Fish Shell(Integration)

問題

rvm versionrvm 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などのコマンドは表示されませんでしたそのファイルで直接呼び出されます。

質問

なぜこれが起こっているのか、そして私がそれをどのように修正できるのか誰か知っていますか?私は自分の前にあるものを修正したいので、必要なことだけが目の前に表示されるので、このエラー/警告メッセージを削除したいと思います。 :)

追伸インストールして使用しようとしていた特定のRubyバージョン(2.0.0)は、同じ端末(iTerm(2))セッションでも適切に機能しているようです。私はそれを閉じて新しいターミナルセッションを作成しましたが、前述のさまざまなコマンドを実行するとメッセージが表示されます。

24
Pysis

TL; DR:コマンドrvm get headを再インストールまたは発行することにより、RVMが少なくとも1.26.11に更新され、端末ごとに1回だけ初期化されていることを確認します環境

結果

結局、環境を整えることができました。他の人が同じ症状を持っているが別の根本的な原因を持っている場合でも、私はいくつかを助けるために私の特定の問題に関連するいくつかの情報を投稿します。

原因

根本的な問題の一部はRVMに起因しており、RVMが私のコマンドライン環境でどのように初期化されているかでした。特にfishシェル環境用に特別に作成されたメソッドが1つあるため、これを行う方法がいくつか見つかりました。

根本的な原因は次のいずれかであるようです:

  • rVMを複数回初期化しました。これは、ターミナル構成ファイルごとに1つずつ、複数のステートメントがあり、それらがどのようにチェーンされているかにより、自動的に追加された他のステートメントを認識していませんでした。
  • または、どういうわけか、fishなどの1つの端末環境の初期化を混合し、他の端末環境bashで実行されている、またはその逆のステートメントが追加されました。これは、壊れたbash PATHに:sで区切られたパスの一部が含まれている他のスペースにも含まれている以下の詳細で確認できます。これはbashの構文が正しくありません、ただしfishは正しい。
  • または両方が起こっていました!

次に、根本的な問題の他の部分は、RVM/direnv関連のバグがトラップ機能に関して最近忍び寄ったように見えることでした。次の原因が原因である可能性のある、RVMの他の問題のあるリリースの1つがあったために、この問題におそらく再び遭遇しました。

  • 再インストール:curl -sSL https://get.rvm.io | bash
  • 手動アップデート:rvm get head
  • rvm_autoupdate_flag=2~/.rvmrcに追加することによる自動更新(先ほど実行したもの)

この問題は、2016年3月30日またはリリース1.26.11で修正される予定です。

物語

GNUユーティリティを使用してファイルシステムを完全に検索し、ファイルの内容を調べた後、Atomを使用してこれをより成功させるために使用しました。 Shell_session_updateの唯一の発生は、Zanchyによって言及された/etc/bashrc_Apple_Terminalファイル(履歴ファイルなど)でのみ見つかったことがわかりました。また、iTerm(2 )、その場合の$TERM_PROGRAMの値はiTerm.appであり、Apple_Terminalではありません。

また、何らかの理由で、RVMのインストールを複数回管理し、インストールプロセスを実行する必要があったことも役に立ちませんでした。これにより、すでにいくつかの「ドットファイル」に構成が追加されており、手動でいくつかまたは行を追加していました。 。

それに加えて、私は.bashrcファイルを作成し、それをMacの.bash_profileからリンクしました。これは、デフォルトでは存在しないためです。 Linuxシステムで以前に読んだことがありましたが、慣例により、.bash_profileは一部のカスタマイズに適しており、.bashrcはユーザーエイリアスや関数の定義などに適しています。そのため、.bash_profileファイル内、特に.profileファイル内をすべてユーザーディレクトリ内で見ることに慣れていませんでした。これも、同様のシステムによってコピーされます。 path_helperがmix(!)に含まれていることも忘れないでください。ただし、問題の原因にはならなかったようです。

正しいかどうかに関係なく、環境を設定するための可能な方法は次のとおりです。

もっと詳しく

より驚くべき冗長性のために、問題のデバッグ中にさまざまな環境でキャプチャしたパスの例を以下に示します。

元の(壊れた)魚PATH

/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/置き場

'当然'より良い魚PATH

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

元の(壊れた)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

'Manually' Fixed bash PATH

/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

'当然'より良いbashパス

/ 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などの端末環境構成ファイルのロードを最初にスキップして、問題が解決した後、最終的にそれらを実行させたときのものです。
41
Pysis

私も同じ問題を抱えていました。後で、これについてのrvm repoにすでに問題があることがわかりました。そして、プルリクエストの1つでそれを修正しました。

これを修正するには、rvmを最新バージョンにアップグレードするか、現在の開発リビジョンを指すようにします。

rvm get head

詳細は この投稿 を参照してください。

5
Ajit Singh