为什么我有/我该如何解决这个错误:“shell_session_update:找不到命令”

Pys*_*sis 24 shell fish rvm macos

背景

我正在使用 OS X El Capitan (10.11.3) 的 MacBook 上使用 Ruby 2.x 和 Rails 4.x,使用鱼壳,采用此页面上列出的集成:RVM -鱼壳(集成)

问题

当执行各种命令如rvm versionrvm install ...rvm use ...rvm --default ...等,收到以下错误消息:

/var/folders/2w/zhgybz7d25s1gdy41qdxwp48001gfh/T/rvm.fish.Pqd0CuZRJW: shell_session_update: command not found
Run Code Online (Sandbox Code Playgroud)

快速 Google 搜索不会返回任何可以帮助我识别和/或解决问题的相关结果,因为它已经解决了我的许多其他开发设置问题。

我在rvm.fish函数文件中、.config/fish目录下以及$HOME/.rvm/bin/rvm主可执行文件中进行了快速文本搜索,但没有看到诸如shell_session_update在该文件中直接调用之类的命令。

有谁知道为什么会这样,我该如何解决?我是一个喜欢修复我面前的东西的人,所以只有我需要采取行动的东西出现在我面前,所以我想删除这个错误/警告信息。:)

PS 我试图安装和使用的特定 Ruby 版本 (2.0.0) 似乎运行正常,即使在同一个终端 (iTerm(2)) 会话中,无需重新启动它。我已经关闭了那个并创建了一个新的终端会话,并且在运行上述各种命令时仍然看到该消息出现。

Pys*_*sis 41

TL;DR:通过重新安装或发出命令确保 RVM 至少更新到 1.26.11 rvm get head,并且每个终端环境仅初始化一次。

结果

最终我能够修复我的环境。我会发布一些与我的具体问题有关的信息,以帮助一些人,即使其他人可能有相同的症状但另一个根本原因。

原因

根本问题的一部分来自 RVM,以及它是如何为我的命令行环境初始化的。我找到了几种不同的方法来做到这一点,特别是因为有一种额外的方法是专门为fishshell 环境设计的。

似乎根本原因是:

  • 多次初始化 RVM,因为我有多个语句,每个终端配置文件一个,并且由于它们的链接方式,我不知道自动添加的其他语句。
  • 或者,以某种方式添加了语句,混合了一个终端环境的初始化,例如fish,正在我的另一个终端环境中运行,bash反之亦然。这可以在我下面的详细信息中看到,其中损坏的bashPATH 有一些由:s分隔的路径,但其他路径也包含在空格中,这对于 来说是不正确的语法bash,但对于fish.
  • 或者两者都发生了!

然后根本问题的另一部分是,最近似乎出现了一个关于陷阱功能的 RVM/direnv 相关错误。我可能再次遇到了这个问题,因为它可能是由以下原因引起的其他有问题的 RVM 版本之一:

  • 重新安装: curl -sSL https://get.rvm.io | bash
  • 手动更新: rvm get head
  • 通过添加rvm_autoupdate_flag=2到自动更新(我刚刚完成)~/.rvmrc

这个问题应该在 2016 年 3 月 30 日或发布 1.26.11 得到修复:

故事

在使用 GNU 实用程序对文件系统进行完整搜索,查看文件内容后,我使用 Atom 进行了更成功的操作,并发现在 Zanchey 提到shell_session_update/etc/bashrc_Apple_Terminal文件中找到了唯一的出现(历史文件除外)诸如此类)。我也不确定为什么要运行它,因为我使用的是 iTerm(2),并且$TERM_PROGRAM在这种情况下的值是iTerm.app而不是Apple_Terminal

出于某种原因,我不得不多次管理 RVM 安装,并完成安装过程,这也无济于事,这显然已经将配置添加到几个“点文件”中,我还手动添加了一些或行.

与此同时,我在 Mac 上创建了一个.bashrc文件并链接到它.bash_profile,因为它显然默认不存在。我以前读过一个 Linux 系统,按照惯例,.bash_profile它适用于某些自定义,.bashrc也适用于其他自定义,例如定义用户别名和函数,反之亦然。所以我不习惯查看.bash_profile文件内部,尤其是不.profile查看文件,所有文件都在用户目录中,类似的系统也复制。我们也不要忘记 a path_helperis in the mix(!),但似乎没有造成任何问题。

设置环境的可能方法(可能正确与否)如下:

更多细节

对于更令人难以置信的冗长,以下是我在调试问题时在不同环境之间捕获的一些示例路径:

原始(破碎)鱼路径

/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/垃圾桶

“自然”更好的鱼路径

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

原始(损坏的)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 :/用户/用户名/.rvm/bin

“手动”修复了 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 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

笔记:

  • '原始'是在遇到问题时在任一命令行解释器中启动全新环境。
  • “手册”当然是当我使用不正确的路径字符串、修复语法错误并看到解释器更正确的操作时,所以我知道在继续修复根本原因时会发生什么。
  • 'natural's 是从我第一次跳过加载我的终端环境配置文件(例如.bashrc等等),然后在问题解决后最终让它们运行时开始的。


Aji*_*ngh 5

我也有同样的问题。后来我发现rvm repo中已经存在这个问题。他们已经在其中一个拉取请求中修复了它。

要解决此问题,请将 rvm 升级到最新版本或将其指向当前的开发版本。

rvm get head
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此帖子