我想在ruby脚本的标题内指定使用哪个ruby解释器和哪个gemset。
的内容#!/usr/bin/env source /usr/local/lib/rvm && rvm ruby-1.9.2@system
会很棒。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:5)
tcurdt的帖子有点误导。在我的系统上,我只是以root身份在系统上设置rvm(ree,1.8.7,& 1.9.2 rubies)。我的/ usr / local / bin看起来像这样:
lrwxrwxrwx 1 root rvm 46 Mar 13 06:50 ree-1.8.7-2011.03 -> /usr/local/rvm/wrappers/ree-1.8.7-2011.03/ruby
lrwxrwxrwx 1 root rvm 44 Mar 13 06:42 ruby-1.8.7-p334 -> /usr/local/rvm/wrappers/ruby-1.8.7-p334/ruby
lrwxrwxrwx 1 root rvm 44 Mar 11 22:42 ruby-1.9.2-p180 -> /usr/local/rvm/wrappers/ruby-1.9.2-p180/ruby
我没有像tcurdt的例子中那样称为系统的gemset。所以我相信实现你所追求的目标的恰当方式就是这样:
#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180
关于rvm在这里做了什么的一些解释:rvm创建了包装脚本(/ usr / local / rvm / wrappers / *),它设置了GEM_PATH
& GEM_HOME
。这些是必需的,以便宝石可以作为特定版本的ruby的一部分正确加载。当您进行rvm的系统安装时,会在/usr/local/bin
下创建这些包装脚本的链接。如果你已经安装了rvm,那么他们就在这里:$HOME/.rvm/bin
。
将shebang行(#!/ ....)添加到/usr/bin/env
前缀至关重要。如果您只是尝试将其直接指向ruby(例如#!/ usr / local / bin / ruby-1.9.2-p180)就不够了。这是因为这些包装器实际上不是ruby解释器,它们是shell脚本,它们在调用脚本作为ruby解释器的参数之前提供环境设置,如下所示:
source "/usr/local/rvm/environments/ruby-1.9.2-p180"
exec ruby "$@"
$@
是您传递给ruby的shell脚本名称。
最后,这是我放在一起的示例脚本,我在cgi-bin目录中运行:
#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180
puts "Content-Type: text/html"
puts
puts "<html>"
puts "<body>"
puts "<h1>Hello Ruby!</h1>"
puts "<p>shebang: #!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180</p>"
puts "<p>RUBY_VERSION: " + RUBY_VERSION + "</p>"
puts "<p>RUBY_PLATFORM: " + RUBY_PLATFORM + "</p>"
puts "<p>RUBY_RELEASE_DATE: " + RUBY_RELEASE_DATE + "</p>"
puts "</body>"
puts "</html>"
答案 1 :(得分:5)
#!/usr/bin/env rvm 1.9.3@mygemset do ruby
答案 2 :(得分:4)
这是做到这一点的方法......
#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180@system
答案 3 :(得分:0)