如何在无环境Ruby脚本中指定rubygems路径?

如何在无环境Ruby脚本中指定rubygems路径?,ruby,path,environment,gem,Ruby,Path,Environment,Gem,我已经用Ruby为Cacti编写了一个数据收集脚本,它在命令行中运行良好,但Cacti通过“env-I”运行该脚本,该脚本剥离了环境,因此Ruby找不到rubygems库(“在'require'中:没有这样的文件要加载--rubygems(LoadError)”)。我该如何解决这个问题?您可以在Ruby脚本中修改以下任何一项:$:,$-I或$LOAD\u路径吗?所有这些都指向同一个数组,该数组指定Ruby在何处查找类和其他ephemera >> $LOAD_PATH => ["

我已经用Ruby为Cacti编写了一个数据收集脚本,它在命令行中运行良好,但Cacti通过“env-I”运行该脚本,该脚本剥离了环境,因此Ruby找不到rubygems库(“在'require'中:没有这样的文件要加载--rubygems(LoadError)”)。我该如何解决这个问题?

您可以在Ruby脚本中修改以下任何一项:$:,$-I或$LOAD\u路径吗?所有这些都指向同一个数组,该数组指定Ruby在何处查找类和其他ephemera

>> $LOAD_PATH
=> ["/usr/local/lib/ruby/site_ruby/1.8", "/usr/local/lib/ruby/site_ruby/1.8/i686-darwin9.5.0", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/1.8", "/usr/local/lib/ruby/1.8/i686-darwin9.5.0", "."]
这是一个运行ruby和-x的shell脚本,它将导致解释器跳过行,直到找到
#*ruby
。这将给你一个恢复环境的机会。
-x
之后是一个noop,您可以取出
,或者用目录替换它。在运行脚本之前,Ruby将在那里刻录cd


我猜这并不是你真正想要的,因为这本可以不用任何技巧,只需要制作两个脚本,一个用于shell,一个用于Ruby。也许Ruby关心的环境变量列表会有所帮助……

我不认为gems使用的
$LOAD\u PATH
(至少,不是唯一的)。您可能想看看这里还没有提到的几个环境变量:

ENV['GEM_HOME']
ENV['GEM_PATH']
您可以通过以下方式查看gems的当前路径:

require 'rubygems'
puts Gem.path

部分答案可能在这里:

FWIW,我试图使用来自不同用户的ruby exe和gems,并且执行
export GEM\u PATH=这种方法还允许ruby代码通过
$stdin.read
访问stdin上的任何输入,非常方便。
require 'rubygems'
puts Gem.path