如何更改/ usr / bin / env?

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

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

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

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

  #!/ usr / bin / env ruby

  #!/路径/到/企业/编辑/ruby

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

我有一个类似的问题,其中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

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

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

PATH = “/选择/ruby企业-XXX /斌:在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏”

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

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

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

除了Ruby Enterprise Edition文档中描述的内容外,还有一些额外的步骤可以使其工作。