如何更改/ usr / bin / env?

时间:2009-06-30 15:21:02

标签: ruby

我有使用#!/usr/bin/env ruby的脚本,但我已经转而使用Ruby Enterprise Edition而不是Ubuntu服务器附带的默认ruby。因此,当我尝试运行它们时脚本会变得怪异。如何将Ruby EE路径添加到/usr/bin/env

5 个答案:

答案 0 :(得分:7)

#!/usr/bin/env ruby类似于从命令行调用ruby,因此适用相同的规则。基本上,将按顺序检查$PATH环境变量中的各个条目,并使用先找到的ruby。因此,请确保Ruby EE的ruby在搜索路径顺序中早于其他ruby

我不熟悉Ruby EE,所以如果它没有名为ruby的可执行文件,只需在您的Ruby EE可执行文件搜索路径的早期目录中创建一个符号链接。

答案 1 :(得分:5)

由于您对Ruby EE有明确的依赖性,因此您可以随时修改脚本而不是环境(可能会产生其他意外后果)。

 #!/usr/bin/env ruby

变为

 #!/path/to/enterprise/edition/ruby

现在读者已经清楚知道你使用的是特定版本的红宝石,而不仅仅是你路径中的红宝石。

答案 2 :(得分:2)

我有类似的问题,其中cron作业停止工作... Cron似乎默认运行命令而不使用您期望的用户PATH设置(以该用户身份登录时)。事实上,它似乎甚至没有使用任何默认的PATH设置(无论是在/ etc / profile或其他地方)。

我能够使用以下命令找到问题(第一个是cron如何运行命令):

  

su -c'printenv PATH'userX

输出:/ usr / local / bin:/ usr / bin:/ bin:/ usr / games

  

su -l userX -c'printenv PATH'

输出:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin: / bin中:在/ usr /游戏

第一个命令似乎没有以任何方式填充PATH变量,除了裸系统默认值。 在我的例子中,我通过添加必要的(REE)路径来解决它:/etc/login.defs,默认情况下如下所示:

/etc/login.defs:103:ENV_PATH PATH = / usr / local / bin:/ usr / bin:/ bin:/ usr / games

答案 3 :(得分:1)

请参阅Ruby EE文档页面中的第1.6节: http://www.rubyenterpriseedition.com/documentation.html

对于系统范围的更改,您可以在/ etc / environment文件中更新PATH以包含Ruby EE bin目录。也许是这样的:

PATH =“/选择/红宝石企业-XXX / bin中:在/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏“

如果您只想让系统中的一个用户看到更改,您可以使用正确的路径更新.bashrc或.profile。

确保首先在目录列表中包含REE路径。

答案 4 :(得分:0)

我在这里发布了我在Ubuntu上使用的解决方案: http://groups.google.com/group/emm-ruby/browse_thread/thread/d0c685bbd096823a#msg_effa7d6ad42c541c

还有一些额外的步骤可以让它超越Ruby Enterprise Edition文档中描述的内容。