如何写一个 Ruby gem 可以在没有前面的单词 'ruby' 的情况下被调用

How to write a Ruby gem that can be invoked without the word 'ruby' preceding it

我想编写一个封装到 Gem 中的 CLI 应用程序,可以像调用 git 命令或 gem 命令一样调用它。例如,当 运行 说 "git clone " 时,您不需要在它前面加上 'ruby'。但是,到目前为止我看到的关于编写 gems 的教程和文章并没有显示这一点。这些示例要么要求您通过 irb 运行 您的 gem,并有适当的要求,要么您 运行 它就像 'ruby '。这不是我想要的。如果您知道任何涵盖此内容的教程,那就太好了。

谢谢。

“#!”脚本开头的行告诉您 shell 使用哪个可执行文件来执行脚本。在这种情况下,它告诉它从环境中找到 Ruby 可执行文件并将脚本交给它执行。

例如,我有一个名为 "hi" 的文件,其中包含以下内容:

#!/usr/bin/env ruby
puts "hi!"

我让它可执行:

$ chmod a+x hi

然后我可以直接执行它,而无需显式调用 Ruby 解释器:

$ ./hi
hi!

根据 the tutuorial,您只需提供这样一个文件,它需要您的 gem 等等,并在您的 gem 的 executables 属性 中提供]规格:

Gem::Specification.new do |s|
  # ...
  s.executables << 'hi'

安装 gem 后,hi 脚本将安装到路径上可发现的位置,这样您就可以调用它。