#Парсер командной строки
Одним из способов параметризации скрипта является передача аргументов в командной строке. Традиционно, операционная система передает аргументы командной строки в виде массива строк.
В 1Script доступна глобальная коллекция АргументыКоманднойСтроки
, в которой можно получить значения, переданные в скрипт извне.
Понятно, что прямая обработка таких аргументов не всегда удобна, поэтому применяют библиотеки-парсеры. Библиотека cmdline является таким парсером для 1Script.
#Использовать cmdline
Парсер = Новый ПарсерАргументовКоманднойСтроки();
##Концепция
В парсер мы передаем наши ожидания - какие именно параметры мы ждем на входе. Парсер разбирает массив аргументов и возвращает нам значения в виде объекта. Если пользователь неправильно передал параметры, то парсер вернет Неопределено
.
Параметры бывают двух видов:
-
Позиционные - сам параметр является значением. В командной строке указано непосредственное значение
-
Именованные - сначала в командной строке указано имя, затем значение
myprogram c:\file.txt -action delete
В приведенном примере в скрипт myprogram передано 3 аргумента с точки зрения ОС. При этом, первый аргумент - позиционный, у него нет предварительной части, он сам по себе и его значение c:\file.txt
.
Далее идет именованный параметр -action
и его значение - delete
.
Чтобы задать данный синтаксис, мы должны настроить парсер:
Парсер.ДобавитьПараметр("ПутьКФайлу");
Парсер.ДобавитьИменованныйПараметр("-action");
Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Сообщить(Параметры["ПутьКФайлу"]);
Сообщить(Параметры["-action"]);
В более сложных случаях скрипт может принимать на вход некие "Команды", задающие режим работы. И каждая команда может иметь свой состав аргументов. Яркий пример - git. При запуске мы передаем команду и ее параметры, например:
git clone http://github.com/repo
git commit somefile.txt -m "сообщение коммита"
Сначала идет команда, а то, что идет за ней - зависит от самой команды.
Команда = Парсер.ОписаниеКоманды("init");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ПутьКХранилищу");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ЛокальныйКаталогГит");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-email");
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-debug");
Парсер.ДобавитьКоманду(Команда);
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
Если Результат.Команда = "init" Тогда
Параметры = Результат.ЗначенияПараметров;
Сообщить(Параметры["ПутьКХранилищу"]);
Сообщить(Параметры["-debug"]);
КонецЕсли;