使用不同的名称从命令行调用ruby gem

时间:2013-04-26 07:22:05

标签: ruby command-line-interface

有没有办法更改用户从命令行调用时必须使用的名称?例如,我有一个名为super_awesome_gem的Thor命令行应用程序。我希望我的gem被称为super_awesome_gem,但是当用户从命令行调用它时,我只希望它们能够调用sup_awe或其他东西。

我已经尝试过编辑gemspec文件以及文件和文件夹名称,但我无法弄清楚这样做的正确方法是什么,或者即使有一个。

有没有办法以一种方式命名gem并让命令行调用另一个名字?

2 个答案:

答案 0 :(得分:3)

您的宝石名称及其捆绑的可执行文件根本不必相同。在gemspec中,您可以通过executables

定义可执行文件列表
Gem::Specification.new do |s|
  s.name = "super_awesome_gem"
  # other gemspec stuff
  s.executables = ["sup_awe"]
end

只要sup_awe列在gemspec的files列表中,并且是可执行的,那么在安装gem之后,它将位于用户的路径中。 Bundler,在引导你的gemspec时,使这更简单

s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }

bin/中的任何内容都将被视为可执行文件。

这就是说你的exectuable / bin文件可以按照你想要的名字命名的漫长道路,并且不必为你的gem命名。

答案 1 :(得分:2)

另一种实现此目的的方法是别名:

alias my_command=original_command

只需将它放在最适合你的地方。

第三种方法是使用wrapper_script,它是一个具有所需名称的脚本,然后调用原始命令并将所有参数传递给它:

#!/bin/sh
original_command $@

或在Windows上的cmd.exe中:

@echo off
original_command %*