结果

结果

背景

我正在使用 OS X El Capitan(10.11.3)的 MacBook 上使用 fish shell 进入 Ruby 2.x 和 Rails 4.x,并采用本页列出的集成:RVM - Fish Shell(集成)

问题

在执行各种命令(例如、、、等)时rvm version,我收到以下错误消息:rvm install ...rvm use ...rvm --default ...

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

快速的谷歌搜索并没有返回任何相关的结果来帮助我识别和/或解决问题,就像对我的许多其他开发设置问题一样。

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

问题

有人知道为什么会发生这种情况吗?我该如何解决?我喜欢修复眼前的事物,这样只有我需要采取行动的事物才会出现在我面前,所以我想删除这个错误/警告消息。:)

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

答案1

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

结果

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

原因

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

根本原因似乎是:

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

然后,根本问题的另一部分是,似乎最近出现了与 RVM/direnv 相关的与 trap 函数相关的错误。我可能再次遇到了这个问题,因为我使用的是其他有问题的 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 安装,经历安装过程,这显然已经将配置添加到几个“点文件”中,其中我还手动添加了一些行,这也没有帮助。

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

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

更多细节

为了更加详细,下面是我在调试问题时在不同环境中捕获的一些示例路径:

原始(损坏)鱼路径

/用户/用户名/.rvm/gems/ruby-2.0.0-p648/bin /用户/用户名/.rvm/gems/ruby-2.0.0-p648@global/bin /用户/用户名/.rvm/rubies/ruby-2.0.0-p648/bin /用户/用户名/.rvm/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/munki /用户/用户名/.rvm/bin

“天然”更好的鱼 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 PATH

/libexec/gnubin:/bin:/Users/用户名/.rvm/gems/ruby-2.0.0-p648/bin /Users/用户名/.rvm/gems/ruby-2.0.0-p648@global/bin /Users/用户名/.rvm/rubies/ruby-2.0.0-p648/bin /Users/用户名/.rvm/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/munki:/Users/用户名/.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:在 /usr/local/munki

笔记:

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

答案2

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

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

rvm get head

更多详细信息请参阅这个帖子

相关内容