Следующая:Chat Scripts, Следующая:config File, Предыдущая:Time Strings, Вверх:Configuration Files
Chat скрипты
Chat скрипты используются несколькими способами, например, при выполнении исходящих звонков по модемам или при входе на удаленную систему. Chat скрипты составлены из пар строк. Программа ожидает поступления первой строки, известной как expect строка, а затем посылает следующую строку, send строку.
Каждый chat сценарий определяется, используя набор команд. Данные
команды всегда оканчиваются на chat
, а начинаться могут с других
строк. Например, в файле sys
присутствует один набор команд,
начинающихся с chat
и другой набор команд, начинающихся с
called-chat
. Приставки используются для того, чтобы ликвидировать
неоднозначность различных типов chat скриптов, данный раздел
игнорирует префиксы различных команд.
chat strings
Задает chat скрипт. Параметры для chat
команды - это пары строк,
разделенных пустым пространством. Первая строка каждой пары - это
ожидаемая (expect) строка, следующая - отсылаемая (send) строка.
Программа ожидает на приеме expect строку, после ее приема,
отсылается строка 'send'. Если ожидаемая строка не появляется в
пределах некоторого количества секунд (как установлено параметром
команды chat-timeout
), chat сценарий завершается неудачно. Если
последняя ожидаемая (expect) строка встречена, (и соответственно
финальная строка отослана), то chat сценарий заканчивается удачно.
Ожидаемая строка может содержать дополнительные subsend
(отсылаемые) и subexpect (ожидаемые) строки, разделенные дефисами.
Если expect (ожидаемая) строка не найдена, отсылается subsend, а
chat скрипт начинает ожидать строку subexpect. Такая форма записи
приводит к тому, что дефис не может появиться в ожидаемой (subexpect)
строке; в ASCII системах вместо дефиса следует использовать
\055
.
Ожидающаяся (subexpect) строка может быть просто ""
, что
обозначает необходимость пропустить фазу ожидания. Следующие escape
символы могут появиться в expect строке:
\b
\n
\N
\r
\s
\t
\\
\ddd
\xddd
Как и в 'С', после backslash (обратная косая черта) может быть до
трех восьмеричных цифр, но на длину шестнадцатеричной escape
последовательности ограничений нет. Для того чтобы включить после
шестнадцатеричной последовательности строку, начинающуюся с цифры,
вставьте в отсылаемую строку ""
.
В ожидаемой (expect) строке chat сценария можно также задать
временной таймаут. Это делается с использованием
последовательности \Wseconds
. Данная управляющая
последовательность может появляться только в самом конце ожидаемой
строки. Данная установка временно отменяет таймаут, заданный с
помощью команды chat-timeout
(описанный ниже) только для
expect строки, к которой подключена данная строка.
Отсылаемая строка может просто состоять из ""
, чтобы пропустить
фазу отсылки. В противном случае, все escape символы являются
допустимыми для send строк, кроме того, разрешены следующие
символы:
EOT
BREAK
\c
\d
\e
\E
\K
BREAK
(для HDB совместимости)
\p
Некоторые специфичные типы chat скриптов также определяют
дополнительные escape последовательности, которые могут появиться
в отсылаемой строке. Например, скрипт входа определяет \L
и
\P
для отсылки имени входа и пароля соответственно.
Перевод каретки отсылается в конце каждой отсылаемой строки, если только управляющая последовательность \c не появляется в строке. Обратите внимание, что некоторые пакеты UUCP используют \b для отсылки break символа, в то время как здесь это означает backspace.
Проверка эха (echo checking) обозначает, что после записи каждого
символа программа ожидает прием этого символа. Проверка эха (echo)
может быть включена отдельно для каждой отсылаемой строки, и
включается для символов следующих за символом \E и выключается
для символов, следующих за \e.
chat-timeout number
Таймаут на ожидание строки expect, количество секунд, в течение
которых происходит ожидание строки expect скрипта, перед тем как
завершится таймаута скрипта и будет отослана следующая подстрока
или весь chat скрипт завершится неудачно. По умолчанию задается -
10 для входного chat
-а или 60 для другого типа chat скрипта.
chat-fail string
Если строка string найдена во время chat-сценария, то сценарий
прерывается. Строка не может содержать пустые символы: для этого в
этой последовательности должны использоваться escape символы. В
одном скрипте могут использоваться несколько команд chat-fail
.
Значение по умолчанию пусто.
Данная команда позволяет chat скрипту быстро прерываться, если
встречена строка ошибки. Например, сценарий для исходящих звонков
по модему может использовать команду chat-fail BUSY
для
остановки chat скрипта немедленно, если встречена строка BUSY
.
Строки chat-fail
рассматриваются в том порядке, в котором они
перечислены, так что если одна строка является суффиксом другой
более длинный строки, то она должна располагаться раньше в
конфигурационном файле. Это оказывает влияние на сообщение об
ошибке, которое протоколируется. Если одна строка входит в другую
строку, то совпадение с более короткой строкой всегда будет
обнаружено раньше, чем будет обнаружено совпадение с более длинной
строкой.
chat-seven-bit boolean
Если параметр истина, то все поступающие символы, обрубаются до
семи битов при сравнении со строкой expect. В противном случае
все восемь битов используются при сравнении. По умолчанию значение
true, из-за того, что некоторые Unix системы генерируют биты
четности во время выдачи подсказки для входа в систему, которые
должны игнорироваться при исполнении chat скрипта. Это не должно
оказывать никакого эффекта на любую chat-program
, которая
игнорирует четность при необходимости.
chat-program strings
Определяет программу, запускаемую перед выполнением chat
скрипта. Данная программа может выполнять свою версию chat
скрипта, или же делать вообще все, что требуется. Если определена
как программа chat-program
так и chat
, то сначала
выполняется программа, затем chat сценарий.
Первый аргумент для команды chat-program
это имя исполняемой
программы. Остальные аргументы команды передаются программе.
Распознаются следующие 'escape' последовательности:
Аргументы, отличающиеся от escape последовательностей, передаются в том же виде, в каком они присутствуют в конфигурационном файле, за исключением того, что пустое пространство сжимается в один пробел (данное исключение может быть в дальнейшем устранено).
Если chat-program
команда не используется, то и никакая
программа не запускается.
Под Unix, стандартный ввод и стандартный вывод программы
подключается к используемому порту. Все что программа записывает в
порт стандартной ошибки, записывается в журнальный log файл UUCP.
Никакие другие файловые дескрипторы не открываются. Если программа
не завершилась со статусом равным 0, то предполагается, что она
закончилась неудачно. Это обозначает, что некоторые программы
номеронабиратели, используемые в некоторых версиях HDB, не могут
использоваться непосредственным образом, но у вас есть возможность
исполнить их с помощью программы dialHDB
каталога contrib
.
Данные программы исполняются под пользователем uucp
, в том же
окружении что и процесс, который запустил uucico
, так что должны
быть приняты меры, для того чтобы нормальным способом обеспечить
безопасность системы.
Для поиска chat программы пути поиска не используется; поэтому
должно задаваться полное имя файла; Если программа является
исполняемым скриптом командной оболочки, то данный скрипт
передается в /bin/sh
даже для систем, для которых невозможно
исполнение скриптов командной оболочки.
Ниже приведен простой пример chat скрипта, который может использоваться для того, чтобы сбросить Hayes совместимый модем.
chat "" ATZ OK-ATZ-OK
Первая expect (ожидаемая) строка - ""
и она игнорируется. Затем
chat скрипт отсылает ATZ
. Если модем отвечает OK
, то chat
скрипт завершается. Если в течение 60 секунд (таймаут по
умолчанию) не будет увидена строка OK
, то chat скрипт отошлет
ATZ
снова. Если на вход поступит OK
, то chat скрипт
завершается неудачно. В противном случае, chat скрипт завершается
неудачно.
Более сложный пример chat скрипта приведен в Logging In.