gpt4 book ai didi

ruby - 在脚本头中选择 rvm gemset

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:17 25 4
gpt4 key购买 nike

我想在我的 ruby​​ 脚本的 header 中指定要使用的 ruby​​ 解释器和 gemset。类似的东西

#!/usr/bin/env source /usr/local/lib/rvm && rvm ruby-1.9.2@system

会很棒。

关于如何做到这一点有什么建议吗?

最佳答案

tcurdt 的帖子有点误导。在我的系统上,我只是在系统上将 rvm(ree、1.8.7 和 1.9.2 rubies)设置为 root。我的/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 的示例中,我没有名为 system 的 gemset。所以我相信实现你所追求的目标的合适方法是这样的:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180

这里对 rvm 所做的一些解释:rvm 创建包装器脚本 (/usr/local/rvm/wrappers/*),它设置诸如 GEM_PATHGEM_HOME 之类的东西。这些是必需的,以便 gems 可以作为特定版本的 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>"

关于ruby - 在脚本头中选择 rvm gemset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5199292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com