我正计划制作我的第一个命令行工具,并且想知道命名和命令是如何工作的。
我希望我的工具能够像 Git 一样运行,因为您只需安装它,然后运行您只需输入git clone
或git commit
. 在我看到的许多示例中,这些工具类似于thor foo:bar
或./foo.rb bar
。
我的主要问题是,如果我的工具名称是Foo
,并且我的工具中的命令是 ,那么我bar
该怎么做,用户所要做的就是Foo bar
在命令行中运行。
我正计划制作我的第一个命令行工具,并且想知道命名和命令是如何工作的。
我希望我的工具能够像 Git 一样运行,因为您只需安装它,然后运行您只需输入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
也可以传递其他参数。
如果将此脚本放入任何$PATH目录中,则可以./
像这样省略:
mycommand smallcmd1
使用 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,它仍然可以工作。