如何更改/ 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文档中描述的内容外,还有一些额外的步骤可以使其工作。