Ruby thor命令行工具命令

时间:2013-09-08 02:23:24

标签: ruby shell gem command-line-interface thor

我打算制作我的第一个命令行工具,并且想知道命名和命令是如何工作的。

我希望我的工具与Git功能相似,只需要安装它,然后运行命令,只需输入git clonegit commit即可。在许多示例中,我看到这些工具类似于thor foo:bar./foo.rb bar

我的主要问题是,如果我的工具名称为Foo,并且我的工具中的命令为bar,我该如何才能这样做,所有用户必须执行的操作是Foo bar在命令行中。

2 个答案:

答案 0 :(得分:0)

git clone的情况下,它的工作方式是执行git程序并将clone作为参数传递给它。因此,如果您有几个应以类似方式启动的脚本,则可以创建一个小型启动器。此代码使用bash(但脚本sh兼容,因此您可以安全地将shebang更改为/bin/sh)。用其他任何语言写同样的东西都很容易。

#!/bin/bash

command=$1
shift

case $1 in    
    cmd1)
        echo "Executing command #1"
        ./smallcmd1 "$@"
        ;;
    cmd2)
        echo "Executing command $command"
        ./smallcmd2 "$@"
        ;;
    '')
        echo 'No option specified'
        exit 1
        ;;

    *) echo "Invalid option"
        exit 1
        ;;
esac
exit $?

smallcmd是你的辅助命令脚本或程序。

现在你可以执行它了:

./mycommand smallcmd1

也可以传递其他参数。

如果您将此脚本放入任何$PATH目录,那么您可以省略./,如下所示:

mycommand smallcmd1

答案 1 :(得分:0)

使用Thor制作可执行文件非常简单。您所要做的就是:

  • 包括红宝石shebang系列。
  • 要求" thor"在你的剧本中。
  • 定义你的Thor课程。
  • #{YourThorClassname}.start添加到您脚本的底部。

示例:my-cli.rb

#!/usr/bin/env ruby

require "thor"

class MyCLI < Thor
  desc "foo", "Prints foo"
  def foo
    puts "foo"
  end
end

MyCLI.start

使脚本可执行:

chmod a+x my-cli.rb

现在您可以输入:

./my-cli.rb foo

你可以在Thor Wiki中找到类似的例子和更多帮助。

您甚至可以将文件重命名为my-cli(没有.rb扩展名),但由于文件中包含ruby shebang,它仍然有效。