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



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

我试过编辑gemspec文件和文件和文件夹名称,但我不知道正确的方法是什么,或者即使有一个。

是否有一种方法可以以一种方式命名gem,并让命令行调用不同的名称?

你的gem名称和它绑定的可执行文件不必完全相同。在您的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/中的任何内容都将被视为可执行文件。

这是说你的可执行/bin文件可以被命名为任何你想要的,而不必以你的gem命名。

另一种实现方法是使用别名:

alias my_command=original_command

把它放在最适合你的地方。

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

#!/bin/sh
original_command $@

或在windows的cmd.exe中:

@echo off
original_command %*

最新更新