2

当您使用 bin 目录安装 gem 时,它会自动添加到 zsh 和 bash 中的 $PATH 中。rubygems 如何在不修改 bashrc、bash_profile 或任何其他 pre-shell 脚本的情况下解决这个问题?

4

1 回答 1

3

当您使用 bin 目录安装 gem时,它会自动添加到 zsh 和 bash 中的 $PATH 中。

这个问题看起来好像$PATH是在安装 gem 时被操纵的。它不是。相反,gem 安装在 上的某个位置$PATH,这很常见。我相信(未经测试),当您安装rubyorrubygems时,gem environment变量EXECUTABLE DIRECTORY值(我的默认值是/usr/bin)将添加到 中$PATH,如果它不存在的话。但是,正如在 上/usr/bin 应该$PATH那样,这是未经检验的猜想,我找不到支持该理论的文档。

在我的测试中(我能想到的第一个分发可执行文件的 gem) ,rake/usr/bin/rakeversion 0.8.7. version 0.9.2.2$PATH没有被sudo gem install rake命令感动。

这是有道理的,因为 RubyGems 是一个版本化系统。它会自动处理 gem 版本,将最新版本的符号链接(或类似的 - 它可能是复制和覆盖)到您的$PATH 而不修改$PATH自身。我认为这/usr/bin/是一个常见的$PATH位置。

我不确定 OP 在哪个平台上工作。以下内容至少与 OS X 有关。

gem environment


  ...SNIP...

  - EXECUTABLE DIRECTORY: /usr/bin

  ...SNIP...

  - GEM PATHS:
     - /Library/Ruby/Gems/1.8
     - /Users/simont/.gem/ruby/1.8
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8

因此,这EXECUTABLE DIRECTORY是我们将捆绑在/bingems 中的可执行文件放置的地方,GEM PATHS也是我们放置 gem 本身的地方。我相当确定,如果您查看 .gem文件GEM PATHS,您可以找到同一个 gem 的多个版本,包括它们的/bin目录,但只有最新的可执行文件链接到EXECUTABLE DIRECTORY.

以问题中提到的方式“手动”编辑$PATH将取决于平台并且有些难以实现(例如,bashvs zshvs启动文件, vs vs vs环境变量变化很大),并且也将是(在我看来)有点“粗鲁”。tschWindowsOS XLinux$OTHER_OS

于 2012-06-24T21:17:51.347 回答