D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Unix / environ

environ

Управление переменными среды интерпретатора команд Unix из TCL

environ {-x} {-n} {-c string|-f {file.reference} item-id}

Позволяет управлять переменными среды интерпретатора команд Unix из TCL. Команды могут передаваться или из командной строки TCL, или из записи.

Можно присваивать значения переменным и проверять их, а также выполнять команды TCL (включая команды Unix с префиксом "!") под управлением переменных интерпретатора команд.

Если никакие аргументы не заданы, команды читаются из записи ".profile" в главном словаре "md" текущего счета.

"Команда" - это последовательность непустых слов, разделенных пробелами. Если команда начинается с символа "*" (звездочка), она считается строкой комментариев и игнорируется. Если первое слово команды не является одним из ключевых слов, распознаваемых программой "environ", эта команда считается командой TCL и выполняется. Команды читаются либо из предложения TCL, либо из записи. На одной строке можно вызывать несколько команд TCL, разделив их символом ";" (точка с запятой).

Подстановка команд

Текст, заключенный в "обратные кавычки" (`text`), считается командой TCL. Эта команда выполняется, ее вывод перенаправляется и результат включается в команду на место той команды, которая была задана в обратных кавычках. Маркеры атрибутов в выходнных данных заменяются пробелами. Подстановка команд выполняется до синтаксического анализа команды.

Если команда является командой операционной системы Unix, то перенаправляется только вывод на стандартное устройство вывода ("stdout"). В случае необходимости можно перенаправить вывод со стандартного устройства вывода сообщений об ошибках ("stderr") на "stdout".

Подстановка параметров

Для ввода параметров подстановки используется символ "$". Если параметр задан одной цифрой, то это позиционный параметр в диапазоне от 0 до 9.

"$0" - это конкатенация всех позиционных параметров от "$1" до "$9", разделенных пробелами.

Позиционные параметры устанавливаются оператором "set" программы "environ".

Именем параметра может быть зарезервированное ключевое слово, интерпретируемое локально программой "environ", или параметр интерпретатора команд Unix.

Подстановка параметров выполняется до синтаксического анализа команды и до подстановки команд.

Параметру интерпретатора команд (или переменным среды) могут присваиваться значения следующей командой:

name=value

Переменные, заданные таким образом, автоматически маркируются для экспорта в среду любой команды операционной системы Unix, выполняемой впоследствии.

Имеются следующие переменные интерпретатора команд "shell":

$? Содержит значение кода, возвращаемого последней выполненной командой. Если последней командой была команда операционной системы Unix, то это значение является кодом выхода. Если же это была команда TCL, то данное значение является возвращаемым номером сообщения об ошибке.
$$ Возвращает номер текущего процесса D3 в операционной системе Unix (PID).
$! Возвращает текущий номер порта (port.number) D3.
$n Указывает позиционный параметр "n" для подстановки. Должен быть в диапазоне от 0 до 9.
$USER Возвращает текущий идентификатор пользователя D3 (user-id).
$ACCT Возвращает текущее имя счета D3.
$TIME Возвращает текущее внутреннее время D3.
$DATE Возвращает текущую внутреннюю дату D3.
${parameter} Подставляет значение переменной "parameter" среды интерпретатора команд. Фигурные скобки необходимы только в случае, если за именем параметра не следует пробел.
Структуры управления
if условие
then
{elif условие}
{then}
else
end

"Условие" оценивается, и команды выполняются в зависимости от результата. Условия могут быть заданы двумя способами:

argument1 {!}operator argument2

где "argument" - это либо строка, либо число, либо параметр, а "operator" может быть следующим: "=", "<", ">", "<=" или ">=".

{!}op argument1 {argument2{ ...}}

где "argument" - это либо строка, либо число, либо параметр, а "operator" может быть следующим:

-f file Условие "истинно", если указанный файл существует и может быть открыт.
-r file item-id Условие "истинно", если указанная запись (item-id) существует и может быть прочитана.
-v file item-id value Условие "истинно", если указанное значение существует и оно не пустое.
-n string Условие "истинно", если "string" имеет ненулевую длину.

Символ "!" перед оператором инвертирует условие.

Команды программы "environ"
chain {file.reference} item-id Заставляет "environ" начать выполнение команд из указанной записи (item-id). Если имя файла ("file.reference") не задано, подразумевается файл "md". Управление в вызывающую программу "environ" не возвращается.
exit Завершает работу "environ".
read Читает одну строку с терминала и приписывает каждое прочитанное слово позиционному параметру "$1", "$2", и т.д. В позиционные параметры можно занести до 32 слов.
set {[+|-] флаги} {аргументы...} Устанавливает (-) или сбрасывает (+) указанные флаги. Эта установка отменяет установку командной строки.
shift {n} Позиционные параметры "$n+1..." переименовываются в "$1...". Если "n" опущено, принимается "1".
Флаги вызова/активизации
-c string Читает команды из строки "string". Если строка "string" содержит более одного слова, она должна быть заключена в одинарные кавычки.
-f {file.reference} item-id Читает команды из записи "item-id" в файле "file.reference". Если имя файла (file.reference) не указано, подразумевается "md".
-n Читает команды, но не выполняет их. Используется с флагом "-x" для изучения эффекта программы "environ" в целях ее отладки.
-v Печатает команды и их аргументы по мере их считывания независимо от того, выполняются они или нет.
-x Печатает команды и их аргументы по мере их выполнения. Вывод начинается с символа "+".

Примеры:

:environ -c 'term $TERM'

Устанавливает определение терминала D3 на то же значение, что и в Unix.

:environ -f ${USER}.env

Вычисляет значение переменной $USER и выполняет сценарий, указанный в текущем словаре. Обратите внимание на фигурные скобки вокруг имени переменной, так как за ним не следует пробел.

:environ -c '$TERM=wyse50'

Устанавливает терминальный драйвер операционной системы Unix на "Wyse 50". Глагол "env" проверяет новый параметр среды.

:environ -f myprofile

Выполняет команды, находящиеся в записи "myprofile" файла "md". Проверяется наличие переменной "TERM" в среде операционной системы Unix, и использует значение этой переменной в качестве аргумента команды "term" TCL, если соответствующая запись существует в файла "dm,devices". Кроме того, в интерпретаторе команд устанавливается переменная "D3LOGON", равная дате и времени D3, и переменная "D3WHO", равная обычной команде "who" TCL. И, наконец, проверяется наличие записи ".profile.username", и, если эта запись существует, она выполняется.

md myprofile
001 *
002 * Set D3 Term if the shell TERM variable is defined.
003 if $TERM != ""
004 then
005   if -r dm,devices, $TERM; then term $TERM; end
006 else
007   display TERM is not defined.
008 end
009 *
010 * Set a Shell variable equal to D3 logon time, using
011 * command substitution (back quotes around time).
012 D3LOGON=`time`
013 *
014 * Set a shell variable equal to port number,user id and MD
015 D3WHO=$! $USER $ACCT
016 *
017 * And go execute any private environment, if item exists
018 if -r md .profile.$USER; then chain .profile.$USER; end