{"id":23759667,"url":"https://github.com/oscript-library/cli","last_synced_at":"2026-01-24T08:31:42.965Z","repository":{"id":150795482,"uuid":"113570129","full_name":"oscript-library/cli","owner":"oscript-library","description":"Библиотека для создания консольных приложений на OScript.io","archived":false,"fork":false,"pushed_at":"2025-10-27T17:06:30.000Z","size":504,"stargazers_count":31,"open_issues_count":18,"forks_count":17,"subscribers_count":7,"default_branch":"develop","last_synced_at":"2025-10-27T19:07:01.420Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"1C Enterprise","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oscript-library.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-12-08T12:04:09.000Z","updated_at":"2025-10-27T17:06:28.000Z","dependencies_parsed_at":"2024-11-17T10:32:00.491Z","dependency_job_id":"c4e4d620-6308-410a-8078-add332b9a1d2","html_url":"https://github.com/oscript-library/cli","commit_stats":null,"previous_names":["oscript-library/cli","khorevaa/cli"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/oscript-library/cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oscript-library","download_url":"https://codeload.github.com/oscript-library/cli/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28720760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T08:27:05.734Z","status":"ssl_error","status_checked_at":"2026-01-24T08:27:01.197Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-31T20:16:56.992Z","updated_at":"2026-01-24T08:31:42.945Z","avatar_url":"https://github.com/oscript-library.png","language":"1C Enterprise","readme":"# `C`_ommand_ `L`_ine_ `I`_nterface_ для OScript\n\n[![Stars](https://img.shields.io/github/stars/khorevaa/cli.svg?label=Github%20%E2%98%85\u0026a)](https://github.com/khorevaa/cli/stargazers)\n[![Release](https://img.shields.io/github/tag/khorevaa/cli.svg?label=Last%20release\u0026a)](https://github.com/khorevaa/cli/releases)\n[![Открытый чат проекта https://gitter.im//oscript-cli/Lobby](https://badges.gitter.im/khorevaa/cli.png)](https://gitter.im/oscript-cli/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n[![Build Status](https://travis-ci.org/khorevaa/cli.svg?branch=master)](https://travis-ci.org/khorevaa/cli)\n[![Coverage Status](https://coveralls.io/repos/github/khorevaa/cli/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/cli?branch=master)\n\nКороткое название библиотеки `cli`\n\nДанная библиотека для языка OScript позволяет создавать консольные приложения с разбором и проверкой аргументов.\n\n[Документация и описание публичного API](docs/readme.md)\n## Быстрый старт\n\n### Пример простого приложения\n\n```bsl\n#Использовать cli\n\nПерем Лог;\n\n///////////////////////////////////////////////////////////////////////////////\n\nПроцедура ВыполнитьПриложение()\n\n    Приложение = Новый КонсольноеПриложение(ПараметрыПриложения.ИмяПриложения(), \"Помощник генерации приложения на основании шаблона cli\");\n    Приложение.Версия(\"v version\", ПараметрыПриложения.Версия());\n\n    Приложение.УстановитьОсновноеДействие(ЭтотОбъект)\n    Приложение.Запустить(АргументыКоманднойСтроки);\n\nКонецПроцедуры\n\nПроцедура ВыполнитьКоманду(Знач Команда) Экспорт\n\n    Сообщить(\"Полезная работа\");\n\nКонецПроцедуры\n\n///////////////////////////////////////////////////////\n\n\nПопытка\n\n    ВыполнитьПриложение();\n\nИсключение\n\n    Сообщить(ОписаниеОшибки());\n\nКонецПопытки;\n```\n\n### Пример приложения с несколькими командами\n\n```bsl\n#Использовать cli\n\n///////////////////////////////////////////////////////////////////////////////\n\nПроцедура ВыполнитьПриложение()\n\n    Приложение = Новый КонсольноеПриложение(\"cli\", \"Помощник генерации приложения на основании шаблона cli\", ЭтотОбъект);\n    Приложение.Версия(\"v version\",\"1.0.0\");\n\n    Приложение.ДобавитьКоманду(\"i init\", \"Инициализация структуры нового приложения\", Новый КомандаInit);\n    Приложение.ДобавитьКоманду(\"g generate\", \"Генерация элементов структуры приложения\", Новый КомандаGenerate);\n\n    Приложение.Запустить(АргументыКоманднойСтроки);\n\nКонецПроцедуры\n\nПроцедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт\n    КомандаПриложения.ВывестиСправку();\nКонецПроцедуры\n\n///////////////////////////////////////////////////////\n\nПопытка\n\n    ВыполнитьПриложение();\n\nИсключение\n\n    Сообщить(ОписаниеОшибки());\n\nКонецПопытки;\n```\n\n### Пример приложения с вложенными командами\n\n```bsl\n#Использовать cli\n\n///////////////////////////////////////////////////////////////////////////////\n\nПроцедура ВыполнитьПриложение()\n\n    Приложение = Новый КонсольноеПриложение(\"cli\", \"Помощник генерации приложения на основании шаблона cli\");\n    Приложение.Версия(\"v version\",\"1.0.0\");\n\n    Приложение.ДобавитьКоманду(\"i init\", \"Инициализация структуры нового приложения\", Новый КомандаInit);\n    Приложение.ДобавитьКоманду(\"g generate\", \"Генерация элементов структуры приложения\", Новый КомандаGenerate);\n\n    Приложение.Запустить(АргументыКоманднойСтроки);\n\nКонецПроцедуры\n\n///////////////////////////////////////////////////////\n\nПопытка\n\n    ВыполнитьПриложение();\n\nИсключение\n\n    Сообщить(ОписаниеОшибки());\n\nКонецПопытки;\n\n```\nКласс `КомандаGenerate`\nДля добавления подкоманды в любую команду используются методы `ДобавитьПодкоманду` или `ДобавитьКоманду`\n\n```bsl\n\nПроцедура ОписаниеКоманды(Команда) Экспорт\n\n    // Метод \u003cДобавитьПодкоманду\u003e\n    Команда.ДобавитьПодкоманду(\"c command\", \"Генерация дополнительной вложенной команды\", Новый КомандаGenerateCommand);\n    \n    // Метод \u003cДобавитьКоманду\u003e\n    Команда.ДобавитьКоманду(\"o option\", \"Генерация опции для команды\", Новый КомандаGeneratOption);\n\nПроцедура ВыполнитьКоманду(Знач Команда) Экспорт\n\nКонецПроцедуры\n\n```\n\n## Мотивация\n\nДля PR в cmdline слишком большие изменения в API, т.е. обеспечить совместимость очень трудоемко.\nСравнительная таблица возможностей:\n\n|                                                                                   | cli | cmdline |\n|-----------------------------------------------------------------------------------|------|---------|\n| Встроенная команда help                                                           | ✓    | ✓       |\n| Автоматическая генерация справки по приложению и командам                         | ✓    | ✓       |\n| Встроенная команда version                                                        | ✓    | ✓       |\n| Команды                                                                           | ✓    | ✓       |\n| Подкоманды                                                                        | ✓    |         |\n| Совмещение булевых (флаговых) опций  `-xyz`                                       | ✓    |         |\n| Совмещение опции и значения  `-fValue`                                            | ✓    |         |\n| Взаимоисключающие опции: `--start ❘ --stop`                                       | ✓    |         |\n| Необязательные опции : `[-a -b]` or `[-a [-b]]`                                   | ✓    |         |\n| Проверка аргументов : `FILE PATH`                                                 | ✓    |         |\n| Необязательные аргументы : `SRC [DST]`                                            | ✓    |         |\n| Повторение аргументов : `SRC... DST`                                              | ✓    |         |\n| Зависимость опций и аргументов друг от друга : `SRC [-f DST]`                     | ✓    |         |\n| Формирование своей строки выполнения: `[-d ❘ --rm] FILE [КОМАНДА [АРГУМЕНТЫ...]]` | ✓    |         |\n\n## Установка\n\nДля установки необходимо: \n* Скачать файл cli.ospx из раздела [releases](https://github.com/khorevaa/cli/releases)\n* Воспользоваться командой:\n\n```\n$ opm install -f \u003cПутьКФайлу\u003e\n```\n\nЛибо скачать библиотеку с помощью opm:\n\n    opm install cli\n\n## Базовые принципы\n\nПри создании приложения необходимо указать имя приложения и описание:\n\n```bsl\nПриложение = Новый КонсольноеПриложение(\"cli\", \"Помощник генерации приложения на основании шаблона cli\");\n```\n\nКаждый возможный вариант выполнения - это \"Команда\". Команды могут создаваться явно, кроме того, само Приложение содержит в себе корневую (Основную) команду.\n\nКаждая команда реализуется в виде отдельного класса. Каждый такой класс обязан иметь экспортную процедуру\n\n```bsl\nПроцедура ВыполнитьКоманду(Знач Команда) Экспорт\nКонецПроцедуры\n```\n\nДля установки основной функции выполнения приложения в приложении надо установить основное действие. В простейшем случае основным действием может выступать сам стартовый сценарий:\n\nПередать данный класс через процедуру:\n```bsl\nПриложение.УстановитьОсновноеДействие(ЭтотОбъект)\n```\n\n### Встроенная команда \"Версия\"\n\nДля добавления отображения версии через опции: ```-v, --version``` надо добавить строчку:\n\n```bsl\nПриложение.Версия(\"v version\", \"1.2.3\");\n```\n\nЭто позволит запускать приложение с ключом ``v`` или ``--version``:\n\n    my-app --version\n\n### Запуск парсера аргументов и приложения в целом\n\nДля запуска приложения необходимо добавить строчку:\n\n```bsl\nПриложение.Запустить(АргументыКоманднойСтроки);\n```\n\nЭтот вызов является \"точкой входа\" в консольное приложение. В общем случае после него уже не идет никакого дополнительного кода. Парсер анализирует аргументы и запускает команды автоматически.\n\n## Параметры команд/приложения\n\nВсе параметры разделяются на два типа:\n* Опция \n* Аргумент\n\nВ общем случае, опции имеют имена, аргументы являются позиционными. Кроме того, по умолчанию указание опций необязательно, а аргументов - обязательно. Это можно переопределить, но дефолтное поведение именно такое. Аргумент - обязателен, опция - нет.\n\n## Опция\n\nОпция может быть следующих простых типов:\n* Булево\n* Строка\n* Число\n* Дата\n\nТакже опция может принимать массивы данных типов, например:\n\n* МассивЧисел\n* МассивСтрок\n* МассивДат\n* МассивБулево\n* Перечисление\n\nДля простых типов поддерживается определение типа значения по умолчанию. Пример:\n\n```bsl\nОтладка = Команда.Опция(\"f force\", ,\"Описание опция\")\n    .ТБулево() // тип опции Булево\n    ;\n// Можно заменить на вызов\n\nОтладка = Команда.Опция(\"f force\", Ложь ,\"Описание опция\");\n\n```\n\nПример `булево` опции:\n\n```bsl\nОтладка = Команда.Опция(\"v debug\", ложь ,\"Описание опции\")\n    .Флаговый() // тип опции булево\n    .ВОкружении(\"ИМЯ_ПЕРЕМЕННОЙ\")\n    .ПоУмолчанию(Ложь)\n    .СкрытьВСправке(); // Любой тип\n\n```\n`ВОкружении` Возможна передача нескольких переменных окружения, разделенных через **пробел**\n\nПример `перечисления` опции:\n\n```bsl\nЦветКонсоли = Команда.Опция(\"c color\", \"green\" ,\"Описание опции\")\n    .ТПеречисление() // тип опции перечисление\n    .Перечисление(\"green\", Новый ЗеленыйЦвет(), \"Консоль будет зеленого цвета\")\n    .Перечисление(\"red\", Цвета.Красный, \"Консоль будет красного цвета\")\n    .Перечисление(\"Случайный\", СлучайныйЦвет(), \"Консоль будет случайного цвета\")\n    ;\n```\n\nПеречисление ограничивает пользователя в выборе значения опции, при этом разработчик для каждой опции может задавать свой тип значения\n\nПодробное описание возможностей параметров команд и приложения [](./docs/ПараметрКоманды.md)\n\n## Пример синтаксиса опций\n\n### Для типа булево:\n\n* `-f` : одно тире для коротких имен\n* `-f=false` : одно тире для коротких имен и значение булево (true/false)\n* `--force` : двойное тире для длинных имен\n* `-it` : группировка булевых опций, будет эквивалентно: -i -t\n\n### Для типа строка, число, дата, длительность:\n\n\n* `-e=value` : одно тире для коротких имен, через **равно** значение опции\n* `-e value` : одно тире для коротких имен, через **пробел** значение опции\n* `-Ivalue` : одно тире для коротких имен, и сразу значение опции\n* `--extra=value` : двойное тире для длинных имен, через **равно** значение опции\n* `--extra value` : двойное тире для длинных имен, через **пробел** значение опции\n\n### Для массивов опций (МассивСтрок, МассивЧисел, МассивДат):\nповторение опции создаст массив данных указанного типа опций:\n\n* `-e PATH:/bin -e PATH:/usr/bin` : Массив, содержащий `[\"/bin\", \"/usr/bin\"]`\n* `-ePATH:/bin -ePATH:/usr/bin` : Массив, содержащий `[\"/bin\", \"/usr/bin\"]`\n* `-e=PATH:/bin -e=PATH:/usr/bin` : Массив, содержащий `[\"/bin\", \"/usr/bin\"]`\n* `--env PATH:/bin --env PATH:/usr/bin` : Массив, содержащий `[\"/bin\", \"/usr/bin\"]`\n* `--env=PATH:/bin --env=PATH:/usr/bin` : Массив, содержащий `[\"/bin\", \"/usr/bin\"]`\n\n## Аргументы\n\nАргументы могут быть следующих простых типов:\n* Булево\n* Строка\n* Число\n* Дата\n\nДля простых типов поддерживается определение типа значения по умолчанию. Пример:\n\n```bsl\nОтладка = Команда.Аргумент(\"PATH\", \"\" ,\"Описание аргумента\")\n    .ТСтрока() // тип опции Строка\n    ;\n// Можно заменить на вызов\n\nОтладка = Команда.Аргумент(\"PATH\", \"\" ,\"Описание аргумента\");\n\n```\n\nТакже аргументы могут принимать массивы данных типов, например:\n\n* МассивЧисел\n* МассивСтрок\n* МассивДат\n* Перечисление (см. пример опций)\n\nПример `Строки` аргумента:\n\n```bsl\nОтладка = Команда.Аргумент(\"PATH\", \"\" ,\"Описание аргумента\")\n    .ТСтрока() // тип опции Строка\n    .ВОкружении(\"ИМЯ_ПЕРЕМЕННОЙ\")\n    .ПоУмолчанию(Ложь)\n    .СкрытьВСправке(); // Любой тип\n```\n\n`ВОкружении` Возможна передача нескольких переменных окружения, разделенных через **пробел**\n\nПодробное описание возможностей параметров команд и приложения [](./docs/ПараметрКоманды.md)\n\n## Операторы\n\nОператор `--` устанавливает метку завершению любых опций.\nВсе, что следует за данным оператором, будет считаться аргументом, даже если начинается с **тире**\n\n\nДля примера, если команда \"ХочуФайл\" принимает в качестве аргумента имя файла, но начинающегося с `-`, тогда строка запуска данной программы будет выглядеть так:\n\n```bsl\nИмяФайла = Команда.Аргумент(\"FILE\", \"\", \"имя файла для создания\")\n```\n\nДопустим, нужное нам имя файла равно `-f`, тогда если выполнить нашу команду:\n\n```\nХочуФайл -f\n```\n\nто будет выдана ошибка, т.к. `-f` распознано как опция, а не аргумент.\nДля того, чтобы решить данную проблему, необходимо объявить окончание опций через оператор `--`\n\n```\nХочуФайл -- -f\n```\n\nТогда определение аргументов будет работать корректно.\n\n## Команды и подкоманды\n\ncli поддерживает создание команд и подкоманд.\nНеограниченное количество вложенных подкоманд.\nА также установки синонимов для команд и подкоманд.\n\n```bsl\nПриложение = Новый КонсольноеПриложение(\"testapp\", \"Выполняет полезную работу\");\nКомандаAve = Приложение.ДобавитьКоманду(\"a ave\", \"Команда ave\", КлассРеализацииПодкоманды);\n```\n\n* Первый аргумент, наименование команды, которое необходимо будет вводить для запуска\n* Второй аргумент, описание команды, которое будет выводиться в справке\n* Третий аргумент, КлассРеализацииКоманды\n\ncli поддерживает указание псевдонимов команд. Для примера:\n\n```bsl\nКомандаAve = Приложение.ДобавитьКоманду(\"start run r\", \"Команда start\", КлассРеализацииПодкоманды);\n```\n\nПсевдонимы для команды будут `start`, `run`, и`r` - можно использовать любой из них.\n\ncli поддерживает автоматическую инициализацию параметров команд.\nПереданный класс должен реализовывать процедуру:\n\n```bsl\nПроцедура ОписаниеКоманды(Команда) Экспорт\n    Путь = Команда.Аргумент(\"PATH\", \"\" ,\"Описание аргумента\")\n        .ТСтрока() / тип опции Строка\n        .ВОкружении(\"ИМЯ_ПЕРЕМЕННОЙ\")\n        .ПоУмолчанию(Ложь)\n        .СкрытьВСправке(); // Любой тип\n\n    Отладка = Команда.Опция(\"o opt\", Ложь ,\"Описание опции\")\n        .ТСтрока() / тип опции Строка\n        .ВОкружении(\"ИМЯ_ПЕРЕМЕННОЙ\")\n        .ПоУмолчанию(Ложь)\n        .СкрытьВСправке(); // Любой тип\nКонецПроцедуры\n```\n\n## Строка использования приложения (спек)\n\nСинтаксис спек базируется на POSIX. Спек является грамматикой парсера аргументов и определяет порядок следования аргументов и опций в командной строке, а также вариативность параметров. Спек формируется либо вручную через указание в поле `Спек`, либо автоматически в момент вызова выполнения приложения / или команды.\n\n### Опции\n\nДля определения опций можно использовать длинные и короткие имена опций:\n```bsl\nКоманда.Спек = \"-f\";\n```\nИ/или:\n```bsl\nКоманда.Спек = \"--force\";\n```\nПример добавления аргументов в команду:\n\n```bsl\nКоманд.Опция(\"f force\", ...);\n```\n\n### Аргументы\n\nПравила наименования аргументов, имя должно содержать только символы в верхнем регистре:\n\nПример использования аргументов в определении строки использования приложения\n```bsl\nКоманда.Спек=\"SRC DST\"\n```\n\nПример добавления аргументов в команду:\n\n```bsl\nКоманда.Аргумент(\"SRC\", ...);\nКоманда.Аргумент(\"DST\", ...);\n```\n\n### Сортировка строки использования\n\ncli позволяет произвольно настраивать порядок использования опций и аргументов:\n\n```bsl\nКоманда.Спек = \"-f -g NAME -h PATH\";\n```\n\nВ примере выше задана грамматика: в командой строке могут идти сначала опции -f и -g, затем аргумент NAME, затем опция -h, затем аргумент PATH.\n\n## Необязательность\n\nЧтобы сделать аргументы или опции необязательными, их необходимо заключить в `[...]`:\n```bsl\nКоманда.Спек = \"[-x]\";\n```\n\n### Выбор между\n\nДля отражения выбора между несколькими опциями или аргументами используется символ `|`:\n\n```bsl\nКоманда.Спек = \"--server | --agent\";\nКоманда.Спек = \"-H | -L | -P\";\nКоманда.Спек = \"-f | PATH\";\n```\n\n### Повторитель\n\nДля повторения аргументов или опций необходимо использовать оператор `...`:\n\n```bsl\nКоманда.Спек = \"PATH...\";\nКоманда.Спек = \"-f...\";\n```\n\n### Логические группы\n\nВозможна логическая группировка опций и аргументов. Данную группировку стоит использовать и комбинировать с такими символами как `|` и `...`:\n\n```bsl\nКоманда.Спек = \"(-e КОМАНДА)... | (-x|-y)\";\n```\nПриведенный пример настраивает строку использования следующим образом:\n* Повторение опции -e  и команды\n* Или\n* Выбор между -x  и -y\n\n### Группировка опций\n\nВсе короткие опции (типа булево) можно группировать в любом порядке вместе:\n```bsl\nКоманда.Спек = \"-abcd\";\n```\n### Все опции\n\nДля определение любой опции приложения:\n\n```bsl\nКоманда.Спек = \"[OPTIONS]\";\n```\nДля примера, для команды с опциями a, b, c и d, указание `[OPTIONS]` или `[ОПЦИИ]` будет аналогично указанию:\n\n```bsl\nКоманда.Спек = \"[-a | -b | -c | -d]...\";\n```\n\n### Аннотация к опциям в строке использования\n\nМожно задавать в строке использования `=\u003cочень хороший текст\u003e` аннотации после указания опции в длинной или короткой форме, для того чтобы определить дополнительное описание или значение по умолчанию.\n\nДля примера:\n\n```bsl\nКоманда.Спек = \"[ -a=\u003cабсолютный путь к файлу\u003e | --timeout=\u003cв секундах\u003e ] ARG\";\n```\nДанные аннотации игнорируются парсером, и не влияют на работу приложения\n\n### Операторы\n\nОператор `--` устанавливает метку завершению любых опций.\nВсе что следует за данным оператором считается аргументами.\n\nБолее, сложный пример:\n\n```bsl\nПриложение.Спек = \"work -lp [-- CMD [ARG...]]\";\n```\n\n## Грамматика строки использования\n\nИспользуется упрощенная (EBNF grammar) грамматика при создании строки использования:\n\nОписание символа         | Символ и использование       | Проверка\n-------------------------|------------------------------|----------------------\nКороткая опция           | '-'                          | [A-Za-z]\nДлинная опция            | '--'                         | [A-Za-z][A-Za-z0-9]*\nСоединенные опции        | '-'                          | [A-Za-z]+\nВсе опции                | '[OPTIONS]' или `[ОПЦИИ]`                  |\nЛогическая группа        | '(' любые другие символы ')' |\nНеобязательная           | '[' любые другие символы ']' |\nПовтор аргумента         | '...'                        |\nКонец повтора аргументов | '--'                         |\n\nМожно комбинировать в указанные символы как хочется, чтобы добиться любых необходимых проверок опций и аргументов.\n\n\n## Строка использования по умолчанию\n\nПо умолчанию, если разработчиком не установлена иная, cli автоматически создает для приложения и каждой команды строки использования, используя следующую логику:\n\n* Начало с пустой строки\n* Если определена хоть одна опция, добавляется `[OPTIONS]` или `[ОПЦИИ]` к текущей строке использования\n* Для каждого добавленного аргумента, добавляет его представление согласно очереди, объявления аргументов.\n\nДля примера, при добавлении в команду следующих опций и аргументов:\n\n```bsl\n\nИнициализацияГит = Команда.Опция(\"g git-init\", Ложь, \"инициализировать создание git репозитория\").Флаговый();\nИнтерактивныйРежим = Команда.Опция(\"interactive\", Ложь, \"интерактивный режим ввода информации о приложении\").Флаговый();\nИспользоватьПодкоманды = Команда.Опция(\"s support-subcommads\", Ложь, \"шаблон с поддержкой подкоманд\").Флаговый();\nФайлКонфига = Команда.Опция(\"c config-file\", \"\", \"файл настроек генерации приложения\");\n\nНаименованиеПриложения = Команда.Аргумент(\"NAME\", \"\", \"наименование приложения\");\nПутьКПапкеГенерации = Команда.Аргумент(\"PATH\", \"\", \"Путь к папке для генерации нового приложения\");\n\n```\n\nБудет автоматически создана следующая строка использования данной команды:\n\n```bsl\n[OPTIONS] NAME PATH\n```\n\n## Доработка\n\nДоработка проводится по git-flow. Жду ваших PR.\n\n## Лицензия\n\nСмотри файл `LICENSE`.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscript-library%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foscript-library%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscript-library%2Fcli/lists"}