Следующая:Chat Scripts, Следующая:, Предыдущая:Time Strings, Вверх:Configuration Files



Chat Scripts

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
backspace символ (возврат на один символ)
\n
символ новой строки или символ перевода строки
\N
Нулевой символ (для совместимости с HDB)
\r
Символ перевода каретки
\s
Пробел
\t
Табуляция
\\
Наклонная черта влево
\ddd
Символ ddd, где ddd от одной до трех восьмеричных цифр
\xddd
Символ ddd, где ddd- шестнадцатеричные цифры.

Как и в 'С', после backslash (обратная косая черта) может быть до трех восьмеричных цифр, но на длину шестнадцатеричной escape последовательности ограничений нет. Для того чтобы включить после шестнадцатеричной последовательности строку, начинающуюся с цифры, вставьте в отсылаемую строку "".

В ожидаемой (expect) строке chat сценария можно также задать временной таймаут. Это делается с использованием последовательности \Wseconds. Данная управляющая последовательность может появляться только в самом конце ожидаемой строки. Данная установка временно отменяет таймаут, заданный с помощью команды chat-timeout (описанный ниже) только для expect строки, к которой подключена данная строка.

Отсылаемая строка может просто состоять из "", чтобы пропустить фазу отсылки. В противном случае, все escape символы являются допустимыми для send строк, кроме того, разрешены следующие символы:

EOT
Отослать символ (end of transmission) конца передачи (^D)
BREAK
Отослать символ прерывания (может не работать для всех систем)
\c
Подавление концевого возврата каретки для отсылаемой (send) строки.
\d
Задержка на отсылку в 1 или 2 секунды
\e
Отключение проверки echo
\E
Разрешение проверки echo
\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' последовательности:

\Y
Имя устройства порта
\S
Скорость для порта
\\
backslash (наклонная черта влево)

Аргументы, отличающиеся от 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.