如何创建支持Ruby的shell命令?

我正在创建一个gem,我希望能够在gem中执行一个shell命令来执行一个函数。 在一个更简单的上下文中,我需要创建一个shell脚本,该脚本在触发shell命令时执行带有选项的Ruby函数。 最简单的方法是什么?

例如:

$ cow moo 

将使用cow命令的脚本获取一个cow gem,并在Ruby gem中执行’moo’function。

如果可以,我还想支持shell中常见的“选项”格式:

 $ cow -t moo 

上面的示例将采用一个选项并在Ruby中应用脚本来处理它(在此示例中-t将打印’moo’两次)。

如果有人能帮助我们,这将是一个很大的帮助。 谢谢!

使用http://visionmedia.github.com/commander/怎么样? 从来没用过它。 但它是一个gem,使开发命令行应用程序更容易:)是你的繁重工作。

这里有更多内容: https : //www.ruby-toolbox.com/categories/CLI_Option_Parsers

您可以创建名为cow的常规可执行Ruby文件,其中包含:

 #!/usr/bin/env ruby require 'cow' Cow.say ARGV.first 

注意第一行,即shebang行 。 它告诉你的shell使用哪个程序来解释脚本。 这允许用户简单地调用cow而不是ruby $(which cow)

将您的脚本放在bin目录中:

 cow/ bin/ cow <- your executable file lib/ cow.rb cow/ say.rb cow.gemspec 

现在,您需要做的就是将它放在您的gem规范中:

 Gem::Specification.new 'cow' do |gem| gem.executables = %w(bin/cow) end 

在安装过程中,Rubygems会在用户路径的某个位置安装gem的二进制文件,以确保找到它们。

至于选项解析,标准库包括optparse ,但也有许多可用的gem 。

我创建了自己的选项解析器,称为Acclaim ,我在自己的实用程序中使用它。 这是一个示例:

 class Cow::Command < Acclaim::Command option :all_caps, '-A', '--all-caps' when_called do |options, args| text = args.first.to_s text.upcase! if options.all_caps? Cow.say text end end 

为了测试您的应用程序,您只需执行您的脚本:

 $ pwd ~/projects/cow $ ./bin/cow moo # output here... 

但是,这需要您根据规范构建gem并在每次要测试更改时在本地安装它:

 ruby -I ./lib -r cow -e 'puts Cow.version' 0.0.1 gem build cow.gemspec && gem install cow-0.0.1.gem 

Bundler通过自动将代码插入加载路径,使生活更轻松。 您只需通过Bundler运行您的可执行文件:

 $ bundle exec ./bin/cow moo # output here...