在脚本标题中选择rvm gemset

tcu*_*rdt 7 ruby bash shell rvm

我想指定哪个ruby解释器以及在我的ruby脚本的头部中使用哪个gemset.有点像

#!/usr/bin/env source /usr/local/lib/rvm && rvm ruby-1.9.2@system
Run Code Online (Sandbox Code Playgroud)

会很好.

有关如何做到这一点的任何建议?

slm*_*slm 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
Run Code Online (Sandbox Code Playgroud)

在tcurdt的例子中,我没有一个名为system的gemset.因此,我认为实现你所追求的目标的恰当方式是这样的:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180
Run Code Online (Sandbox Code Playgroud)

关于rvm在这里做什么的一些解释:rvm创建了包装脚本(/ usr/local/rvm/wrappers/*),它们设置了像GEM_PATH&的东西GEM_HOME.这些是必需的,以便宝石可以作为特定版本的ruby的一部分正确加载./usr/local/bin当您执行rvm的系统安装时,会在这些包装器脚本的链接下创建.如果您已经安装了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 "$@"
Run Code Online (Sandbox Code Playgroud)

$@被传递给你的红宝石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>"
Run Code Online (Sandbox Code Playgroud)


Far*_*han 5

#!/usr/bin/env rvm 1.9.3@mygemset do ruby


tcu*_*rdt 4

这是这样做的方法......

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180@system
Run Code Online (Sandbox Code Playgroud)