Ruby thor命令行工具命令
我正计划制作我的第一个命令行工具,我想知道命名和命令是如何工作的 我希望我的工具的功能类似于Git,即您只需安装它,然后运行命令,只需输入Ruby thor命令行工具命令,ruby,shell,gem,command-line-interface,thor,Ruby,Shell,Gem,Command Line Interface,Thor,我正计划制作我的第一个命令行工具,我想知道命名和命令是如何工作的 我希望我的工具的功能类似于Git,即您只需安装它,然后运行命令,只需输入Git clone或Git commit。在我看到的许多示例中,工具类似于thor foo:bar或/foo.rb bar 我的主要问题是,如果我的工具名是Foo,而我的工具中的命令是bar,我如何才能做到这一点,用户只需在命令行中运行Foo bar。在git clone的情况下,它的工作方式是执行git程序,并将clone作为参数传递给它。因此,如果您有几个
Git clone
或Git commit
。在我看到的许多示例中,工具类似于thor foo:bar
或/foo.rb bar
我的主要问题是,如果我的工具名是
Foo
,而我的工具中的命令是bar
,我如何才能做到这一点,用户只需在命令行中运行Foo bar
。在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
s是辅助命令脚本或程序
现在您可以执行它:
./mycommand smallcmd1
还可以传递其他参数
如果将此脚本放在任何目录中,则可以省略/
,如下所示:
mycommand smallcmd1
用Thor制作一个可执行文件非常简单。你所要做的就是:
- 包括ruby shebang系列
- 在脚本中需要“thor”
- 定义你的Thor类
- 将
添加到脚本底部#{YourThorClassname}.start
./my-cli.rb foo
你可以在《雷神》中找到一个类似的例子和更多的帮助
您甚至可以将文件重命名为
my cli
(没有扩展名.rb
),由于文件中的ruby shebang,它仍然可以工作。显示您尝试过但失败的代码在哪里?正如我在原文中所说的,我以前从未做过这样的代码,我所看到的任何资源或教程都没有说明如何做到这一点。所以真的没有尝试,我真的只是想找出从哪里开始,或者只是一个建议,我可以看看哪里。我已经阅读了尽可能多的关于Thor和Ruby命令行工具的文档,但什么也没找到。是一个描述这一点的博客。它只描述了简单的Ruby,没有任何帮助,标准库中的OptParse,还有一个使用ThorThank的例子,我会读到的。太棒了,如果我想自动完成的话。用户只需运行一行就可以安装我的工具,而且它可以立即工作。我在程序中是否做了一些更改以使其安装到$PATH?或者安装程序命令是否指定将其放入$PATH?我应该把它做成红宝石吗?这些似乎很容易安装。
chmod a+x my-cli.rb
./my-cli.rb foo