如何创建支持Ruby的shell命令?
我正在创建一个gem,在其中我希望能够生成一个shell命令来执行gem中的函数。在一个更简单的上下文中,我需要创建一个shell脚本,当shell命令被触发时,该脚本将执行带有选项的Ruby函数。最简单的方法是什么 例如:如何创建支持Ruby的shell命令?,ruby,shell,command-line,command,Ruby,Shell,Command Line,Command,我正在创建一个gem,在其中我希望能够生成一个shell命令来执行gem中的函数。在一个更简单的上下文中,我需要创建一个shell脚本,当shell命令被触发时,该脚本将执行带有选项的Ruby函数。最简单的方法是什么 例如: $ cow moo 将使用cow命令的脚本获取cow gem,并在Ruby gem中执行“moo”函数 如果可以,我还希望在shell中支持常见的“选项”格式: $ cow -t moo 上面的示例将采用一个选项并应用Ruby中的脚本来处理它(在本例中,-t将打印两次“
$ cow moo
将使用cow命令的脚本获取cow gem,并在Ruby gem中执行“moo”函数
如果可以,我还希望在shell中支持常见的“选项”格式:
$ cow -t moo
上面的示例将采用一个选项并应用Ruby中的脚本来处理它(在本例中,-t
将打印两次“moo”)
如果有人能在这方面帮助我们,那将是一个很大的帮助。谢谢 您可以创建一个名为
cow
的常规可执行Ruby文件,其中包含:
#!/usr/bin/env ruby
require 'cow'
Cow.say ARGV.first
请注意第一行,即。它告诉shell要使用哪个程序来解释脚本。这允许用户简单地调用cow
,而不是ruby$(哪个cow)
将脚本放入bin
目录:
cow/
bin/
cow <- your executable file
lib/
cow.rb
cow/
say.rb
cow.gemspec
在安装过程中,Rubygems将在用户路径的某个位置安装gem的二进制文件,确保可以找到它们
至于选项解析,标准库包括,但也有可用的
我创建了,我在自己的实用程序中使用它。以下是一个示例:
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
但是,这要求您根据规范构建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运行可执行文件:
$ bundle exec ./bin/cow moo
# output here...
使用如何?以前从未用过。但它是一块宝石,可以让开发命令行应用程序变得更容易:)为您带来繁重的负担
这里还有很多:没有,正如我所说的,我对他们没有经验。但我认为这是可能的。也许可以检查gem的源代码,看看他们是如何编写测试来测试框架的。@biker,您可以构建和安装gem,而无需将其推送到rubygems,或者只需使用Bundler。详细阅读我的答案。
ruby -I ./lib -r cow -e 'puts Cow.version'
0.0.1
gem build cow.gemspec && gem install cow-0.0.1.gem
$ bundle exec ./bin/cow moo
# output here...