像“rails”,“rspec”和“cucumber”这样的宝石如何允许用户使用以宝石名称开头的命令?
rails new project
rspec spec
cucumber features
并非所有宝石都具备此功能。例如,当我输入json
时,即使我安装了它,我也会
-bash: json: command not found
答案 0 :(得分:4)
从rubygems.org documentation建立宝石:
除了提供Ruby代码库之外,gems还可以公开 一个或多个可执行文件到shell的PATH。可能是最好的 已知的例子是rake。另一个非常有用的是 prettify_json.rb,包含在JSON gem中,它在a中格式化JSON 可读的方式(并包含在Ruby 1.9中)。
[...]
向gem添加可执行文件是一个简单的过程。你只需要 将文件放在gem的bin目录中,然后将其添加到 gemspec中的可执行文件列表。让我们为Hola gem添加一个。
[...]
可执行文件本身只需要一个shebang就可以搞清楚 运行它的程序是什么。
[...]
所有它正在加载gem,并传递第一个命令 行参数作为与你打招呼的语言。
答案 1 :(得分:4)
Gem的.gemspec文件如下所示:
Gem::Specification.new do |s|
s.name = "haml"
s.version = "3.1.8"
....
s.executables = ["haml", "html2haml"]
end
这意味着在安装此Gem(在本例中为haml-3.1.8)时,还会为文件haml
和html2haml
创建可执行文件(也称为“binstubs”)的链接。在gem的bin /目录中找到。
在这种情况下,例如文件bin/haml
可能如下所示:
#!/usr/bin/env ruby
require 'rubygems'
require 'haml'
puts Haml::VERSION
答案 2 :(得分:1)
这些宝石具有可以从CLI执行的二进制文件。大多数宝石不需要此功能,只提供代码扩展。
编辑:他们可能不是'二进制文件'。它们也可以只是可执行的Ruby代码。谢谢@holger