
背景
我正在使用 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,以及它如何针对我的命令行环境进行初始化。我找到了几种不同的方法来做到这一点,特别是因为有一种额外的方法是专门为fish
shell 环境设计的。
根本原因似乎是:
- 多次初始化 RVM,因为我有多个语句,每个终端配置文件一个,并且由于它们是如何链接的,我不知道其他语句是否自动添加。
- 或者,不知何故添加了语句,这些语句混合了一个终端环境(例如)的初始化
fish
,并在我的另一个终端环境中运行,bash
反之亦然。这可以在下面的详细信息中看到,其中损坏的bash
PATH 中的一些路径由:
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 中修复:
- GitHub - direnv/direnv - 问题:/bin/bash:shell_session_update:未找到命令 #210
- GitHub - rvm/rvm - 问题:RVM 覆盖 OS X El Capitan 中定义的 bash 退出陷阱 #3540
- GitHub - rvm/rvm - 问题:OSX(El Capitan).bash_profile 中的 rvm 源代码破坏了 .bash_history 写入(Terminal.app)#3560
- GitHub - rvm/rvm - 拉取请求:OSX 10.11+ 上的 bash 会话错误 #3627
- GitHub - rvm/rvm - 问题:应处理 ~/.bash_sessions_disable #3628
- GitHub - rvm/rvm - 问题:稳定更新后出现 Fish shell 错误 #3655
- GitHub - rvm/rvm - 问题:不要使用不存在的命令 #3657
- GitHub - rvm/rvm - 发布:比较更改 1.26.11..master
- 清理恢复 EXIT 上的 shell_session_update 钩子,更新 #3657,更新 #3628
故事
在与 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
是混杂的(!),但似乎没有造成任何问题。
设置环境的可能方法(可能正确或不正确)如下:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
export PATH="$PATH:$HOME/.rvm/bin"
PATH
(作为在将控制权交给用户之前修改变量的最后一行。rvm default
(还需要是最后的PATH
修改行。来自:StackOverflow - 使用 rvm 2.0.0 --default 时出现“警告!PATH 设置不正确”)
更多细节
为了更加详细,下面是我在调试问题时在不同环境中捕获的一些示例路径:
原始(损坏)鱼路径
/用户/用户名/.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
更多详细信息请参阅这个帖子。