当您使用 bin 目录安装 gem 时,它会自动添加到 zsh 和 bash 中的 $PATH 中。rubygems 如何在不修改 bashrc、bash_profile 或任何其他 pre-shell 脚本的情况下解决这个问题?
1 回答
当您使用 bin 目录安装 gem时,它会自动添加到 zsh 和 bash 中的 $PATH 中。
这个问题看起来好像$PATH
是在安装 gem 时被操纵的。它不是。相反,gem 安装在 上的某个位置$PATH
,这很常见。我相信(未经测试),当您安装ruby
orrubygems
时,gem environment
变量EXECUTABLE DIRECTORY
值(我的默认值是/usr/bin
)将添加到 中$PATH
,如果它不存在的话。但是,正如在 上/usr/bin
应该$PATH
那样,这是未经检验的猜想,我找不到支持该理论的文档。
在我的测试中(我能想到的第一个分发可执行文件的 gem) ,rake
我/usr/bin/rake
从version 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
是我们将捆绑在/bin
gems 中的可执行文件放置的地方,GEM PATHS
也是我们放置 gem 本身的地方。我相当确定,如果您查看 .gem文件GEM PATHS
,您可以找到同一个 gem 的多个版本,包括它们的/bin
目录,但只有最新的可执行文件链接到EXECUTABLE DIRECTORY
.
以问题中提到的方式“手动”编辑$PATH
将取决于平台并且有些难以实现(例如,bash
vs zsh
vs启动文件, vs vs vs环境变量变化很大),并且也将是(在我看来)有点“粗鲁”。tsch
Windows
OS X
Linux
$OTHER_OS