在我的大量Ruby脚本集合中,我使用常见的shebang启动我的脚本:
#!/usr/bin/env ruby
现在我发现一些需要某些Ruby版本的脚本,不,它们不是可以在特定Ruby版本下部署的Rails应用程序。它们只是单个文件脚本,可以从命令行启动,无法使用系统版本。
在运行以下文件代码之前,有没有办法编写一个用rbenv / rvm设置环境的shebang?
答案 0 :(得分:1)
rbenv将查找由(例如)
设置的.ruby-version
文件
$ rbenv local 1.9.3-p448
创建一个简单文件check
#!/usr/bin/env ruby
puts RUBY_VERSION
使其可执行
$ chmod +x check
运行它
$ ./check
输出
1.9.3
也就是说,这不是一个文件设置。如果有办法使用shebang来改变rbenv的行为,那可能会更合适。
答案 1 :(得分:1)
您不一定需要设置任何环境。您所需要的只是您想要运行的ruby二进制文件的路径以及其他所有内容。
以下是有关如何设置的示例:
创建文件夹~/bin
。这将保存指向所有个人ruby二进制文件的指针(符号链接)。
更新您的shell PATH
,以便~/bin
包含在可执行文件的搜索路径中。
将~/bin
中需要的任何ruby二进制文件符号链接到实际的ruby二进制文件。
例如,在我的~/bin
我有:
ruby18 -> /opt/ruby18/bin/ruby
ruby19 -> /opt/ruby19/bin/ruby
ruby20 -> /opt/ruby20/bin/ruby
现在假设您有一个需要1.9才能运行的脚本。那么你需要做的就是:
#!/usr/bin/env ruby19
如果您已将gem安装到每个ruby可执行文件的默认gem目录中,这将有效。如果您在其他地方安装了gem,那么它会变得更复杂,您需要在运行脚本之前修改GEM_PATH
。
如果您不想对~/bin
感兴趣,那么只需硬编码您的shebang行,而不是直接指向ruby二进制文件:
#!/opt/ruby19/bin/ruby
...或等效的rbenv / rvm路径。
在你的~/bin
中使用符号链接可以让你更轻松地更新你的bin指针,如果我们说你编译一个新的ruby 1.9补丁,你想把它放在另一个文件夹,如/opt/ruby19-p123
。然后,您只需要更新~/bin
中的符号链接,所有脚本都将运行新的修补版本。