понедельник, 18 марта 2019 г.

Использование minim.exe в командных файлах

Для задач интеграции сервера MiniM с административными задачами, выполняемыми командными файлами, рассмотрим вопрос взаимодействия процесса MiniM с командными файлами и передачи параметров.

Далее в примерах полагается, что сервер установлен в каталог w:\minim и что выполнение командных файлов производится на сервере.

Вызов процесса MiniM с выводом на экран или в файл

Для вызова процесса MiniM с целью получения вывода на экран или в файл предусмотрена опция -std, указывающая процессу использовать стандартный ввод-вывод (stdin - stdout). Дополнительно предусмотрена опция -h означающая закончить процесс по окончании ввода, а не оставаться ждать ввода с консоли. Для указания что именно нужно выполнить процессу используется опция -x. Например:
file 01.bat:

@echo off
set minim=w:\minim\bin\minim.exe
%minim% -std -h -x "w $zd($h),!"
При работе этого командного файла выводится на экран текущая дата.

Тот же самый вывод можно отправить в файл, если использовать перенаправление:
%minim% -std -h -x "w $zd($h),!" > report.txt
В этом случае вывод записывается в файл report.txt.

Передача набора команд из нескольких строк через файл

Для передачи процессу MiniM команд в нескольких строках может использоваться файл с командами на языке MUMPS. Для указания что нужно исполнить не строку, а команды файла, опции -x перед именем файла указывается символ @. Например, пусть имеем команды:
file 02.m:

w "Now: ",$zd($h),!
w "Version: ",$zv,!
Тогда для вызова процесса с передачей строк с командами используем символ @:
file 02.bat:

@echo off
set minim=w:\minim\bin\minim.exe
%minim% -std -h -x @02.m
При выполнении этого командного файла выводится текущая дата и текущая версия MiniM.

Передача команд через перенаправление

Для передачи команд на вход процессу MiniM можно использовать опцию -std, которая включает прием команд со стандартного ввода и использование символов перенаправления | и <.
file 03.bat:

@echo off
set minim=w:\minim\bin\minim.exe
echo w $zd($h),! | %minim%
При выполнении этого командного файла процесс считывает из текущего стандартного ввода последовательность команд построчно и выполняет их. Процесс MiniM содержит средства автоматического определения что процесс запущен с перенаправлением ввода и автоматически использует опции -std и -h даже если они не были указаны.

Передача параметров через препроцессор командных файлов

Если процессу MiniM не передавать значений параметров из командного файла, то он сможет ориентироваться только на текущее состояние базы данных. Чтобы процесс мог использовать данные от командного файла, их надо передать процессу. Один из вариантов - это использование препроцессора командных файлов, который автоматически раскрывает имена переменных декорированных символами %% и выполняет подстановку. Например, можно сформировать команду для выполнения процессом:
file 04.bat:

@echo off
set minim=w:\minim\bin\minim.exe
set a=123
%minim% -std -h -x "w \"Variable a is %a%\",!"
При выполнении этого командного файла выводится сообщение:
Variable a is 123
При использовании подстановок следует внимательно относиться к содержанию переменных и корректно формировать строку на языке MUMPS, обращать внимание на соответствующее удвоение кавычек.

Передача параметров через переменные окружения

Вторым вариантом передачи параметров процессу MiniM от командного файла является использование переменных окружения и чтение их процессом через группу функций $v("proc"). Например:
file 05.bat:

@echo off
set minim=w:\minim\bin\minim.exe
set a=123
%minim% -std -h -x "w $v(\"proc\",9,\"a\")_456,!"
При выполнении этого командного файла процесс читает значение переменной окружения a, установленной в командном файле, конкатенирует с этим значением строку 456 и выводит ее. На экран выводится строка
123456
Прием параметров через установку переменных окружения

Для того чтобы в командном файле получить значение из процесса MiniM, можно использовать формирование командного файла на языке MUMPS и его выполнение из вызвавшего командного файла, например:
file 06.bat:

@echo off
set minim=w:\minim\bin\minim.exe
set a=123

echo First value is %a%

%minim% -std -h -x "w \"set a=\"_$v(\"proc\",9,\"a\")_456" > second.bat

call second.bat
del second.bat

echo Second value is %a%
При выполнении этого командного файла процесс MiniM получает значение параметра от командного файла через чтение переменной окружения, конкатенирует с этим значением строку 456 и выводит команду для командного файла в указанный перенаправлением файл second.bat. После этого производится вызов этого сгенерированного командного файла и его удаление как ненужного. В результате выполняется присваивание переменной окружения нового значения. При работе этого командного файла на экран выводятся строки:
First value is 123
Second value is 123456

Комментариев нет:

Отправить комментарий