Thor 是一个用于创建命令行工具的 Ruby 库。它简化了命令行工具的创建过程,使得开发者可以专注于业务逻辑而不是重复的代码编写。Thor 提供了一种简单的方式来定义命令、选项和参数,同时支持自动帮助信息生成和错误处理。
安装 Thor
Thor 作为 gem 包发布,你可以通过 RubyGems 来安装它。打开终端并执行以下命令:
gem install thor
创建第一个 Thor 命令行工具
创建一个新的 Ruby 文件,例如 hello_thor.rb
,并在其中编写以下代码:
-- -------------------- ---- ------- ------- ------ ----- ---------- - ---- ---- ---- ------ ------- - --------- --- --------- ---- ------- --------- --- ---- ---- ------ ---- ------- -- -------- --- --------- ---- --------- -------- --- --- ------ --- --- ----------------
这个例子定义了一个名为 HelloWorld
的 Thor 类,并且在这个类里定义了两个命令:say
和 bye
。say
命令接受一个参数 name
,用于打印问候语;bye
命令同样接受一个参数 name
,用于打印告别语。
要运行这个程序,只需在命令行中输入:
ruby hello_thor.rb say Alice
或
ruby hello_thor.rb bye Bob
添加选项
Thor 支持添加选项来进一步定制命令的行为。下面的例子展示了如何为 say
命令添加一个可选的选项 --loud
:
-- -------------------- ---- ------- ------- ------ ----- ---------- - ---- ---- ---- ------ ------- - --------- ------------- ------ ----- --------- -------- ----- ----- ------ ------- --- --------- -- -------------- ---- ------- -------------------- ---- ---- ------- --------- --- --- ---- ---- ------ ---- ------- -- -------- --- --------- ---- --------- -------- --- --- ------ --- --- ----------------
在这个版本中,我们使用了 method_option
方法来添加选项。type: :boolean
表示这是一个布尔选项,用户可以通过 -l
或者 --loud
来启用这个选项。如果选项被启用,那么输出将会以大写字母显示,并且是红色的(这里假设你的终端支持颜色输出)。
要测试这个新的功能,可以在命令行中这样调用:
ruby hello_thor.rb say Alice --loud
这将输出一条大写的问候语,可能还会带有一些颜色效果。
使用子命令
Thor 支持子命令的概念,允许你在一个命令下组织多个相关的命令。这使得命令结构更加清晰,用户也更容易理解如何使用你的命令行工具。下面是一个例子:
-- -------------------- ---- ------- ------- ------ ----- ---------- - ---- ---- ------ ------ ------- - ------- ------------- ------ ----- --------- -------- ----- ----- ------ ------- --- ----------- -- -------------- ---- ------- -------------------- ---- ---- ------- --------- --- --- ---- --------- ------ ----- ------- -- - ------- --- -------------- ---- --------- -------- --- --- ------ --- ----- ----------- - ---- ---- ------ ------ ------- - ------ ---- --- ----------- --- ----------- ---- ------------ ------ --------- --- --- --------------- ------ --- ----------------
在这个例子中,我们定义了一个子命令类 Subcommands
,它包含了自己的一组命令。默认情况下,当我们不指定任何命令时,会默认执行 greet
命令。
要测试子命令功能,可以这样调用:
ruby hello_thor.rb greet Alice ruby hello_thor.rb subcommands greet Alice
第一个命令将使用主命令的 greet
方法,而第二个命令则会调用子命令中的 greet
方法。
自动生成的帮助文档
Thor 会自动生成帮助文档,这对于用户来说非常有用。当你在命令行中输入命令名后加上 -h
或 --help
,就会看到详细的帮助信息。例如:
ruby hello_thor.rb greet -h
这将显示 greet
命令的帮助信息,包括描述和可用选项等。
通过这些基本概念的学习,你可以开始利用 Thor 来构建更复杂的命令行工具。Thor 不仅提供了强大的功能,而且使用起来也非常直观和高效。希望这个教程能够帮助你更好地理解和使用 Thor!