Команды инструментов командной строки 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 $?

куда smallcmds ваши второстепенные командные сценарии или программы.

Теперь вы можете выполнить это:

./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 расширение), и он все еще работает из-за рубиновой шебанга внутри файла.

Другие вопросы по тегам