有什么方法可以更改用户从命令行调用时必须使用的名称?例如,我有一个名为 super_awesome_gem 的 Thor 命令行应用程序。我希望我的 gem 被称为 super_awesome_gem,但是当用户从命令行调用它时,我只希望他们能够调用 sup_awe 或其他东西。
我已经尝试编辑 gemspec 文件以及文件和文件夹名称,但我无法弄清楚这样做的正确方法是什么,或者即使有一个。
有没有办法以一种方式命名 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 %*