Команды инструментов командной строки Ruby Thor
Я планирую создать свой первый инструмент командной строки, и мне было интересно, как работают названия и команды.
Я хотел бы, чтобы мой инструмент функционировал аналогично Git, в том смысле, что вы просто устанавливаете его, а затем запускаете команды, которые вы просто вводите git clone
или же git commit
, Во многих примерах, которые я видел, инструменты thor foo:bar
или же ./foo.rb bar
,
Мой главный вопрос: как мне сделать так, чтобы мои инструменты назывались Foo
и команда в моем инструменте bar
все, что нужно сделать пользователю, это запустить Foo bar
в командной строке.
2 ответа
В случае git clone
как это работает git
программа выполнена и clone
передается ему в качестве параметра. Итак, если у вас есть несколько сценариев, которые должны запускаться аналогичным образом, вы можете создать небольшую панель запуска. Этот код находится в Bash (но сценарий sh
совместимы, так что вы можете смело менять шебанг на /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
расширение), и он все еще работает из-за рубиновой шебанга внутри файла.