man chat(8) - сценарий, автоматизирующий взаимодействие с модемом |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
НАЗВАНИЕ
chat - сценарий, автоматизирующий взаимодействие с модемом
ОБЗОР
chat [ параметры ] сценарий
ОПИСАНИЕ
Программа chat определяет диалоговый обмен между компьютером и модемом. Её основное назначение состоит в установке соединения между демоном протокола точка-точка (pppd) и удалённым процессом pppd.
ОПЦИИ
-f <chat_файл>
Читать chat-сценарий из файла chat_файл. Использование этой опции и параметров chat-сценария взаимно исключено. Пользователь должен иметь право чтения файла. В файле разрешается указывать несколько строк. Для разделения строк используются пробелы или знаки табуляции.
-t <таймаут>
Установить таймаут для получения ожидаемой строки. Если строка не получена за это время, ответная строка не будет послана. Может быть послан альтернативный ответ, но если альтернативы нет, то скрипт даст сбой. В случае сбоя программа chat завершится с ненулевым кодом ошибки. Вы также можете использовать строку TIMEOUT для указания таймаута.
-r <файл_отчёта>
Указать файл для вывода строк отчёта. Если вы используете ключевое слово REPORT, полученные строки будут выведены в этот файл. Если эта опция не используется, но вы всё же используете ключевое слово REPORT, строки отчёта будут перенаправляться в поток stderr.
-e
Начинать с включённой опцией эхо-отображения. Эхо также может быть включено или выключено в любом месте chat-сценария при помощи ключевого слова ECHO. Когда эхо включено, весь вывод с модема дублируется в поток stderr.
-E
Включить подстановку переменных окружения внутри chat-сценариев, используя стандартный синтаксис $xxx.
-v
Потребовать, чтобы chat-сценарий исполнялся в подробном режиме. Программа chat будет записывать состояние выполнения chat-сценария вместе с данными, полученными с модема, и выводить строки, отправленные модему. По умолчанию журналирование осуществляется с помощью SYSLOG; метод журналирования может быть изменён флагами -S и -s.
-V
Потребовать, чтобы chat-сценарий исполнялся в режиме подробного вывода в поток stderr. В таком случае программа chat будет направлять весь текст полученный с модема и все строки отправленные модему в устройство stderr. Это устройство обычно является локальной консолью на компьютере, с которого запущена программа chat или pppd.
-s
Использовать поток stderr. Все сообщения опции '-v' и все сообщения об ошибках будут перенаправлены в stderr.
-S
Не использовать SYSLOG. По умолчанию сообщения об ошибках отправляются в SYSLOG. Использование -S предотвратит отправку сообщений опции '-v' и всех сообщений об ошибках в SYSLOG.
-T <номер_телефона>
Передать точную строку, обычно номер телефона, которая будет заменять метасимвол \T в отправляемой строке.
-U <номер_телефона_2>
Передать вторую строку, обычно номер телефона, которая будет заменять метасимвол \U в отправляемой строке. Это полезно для вызова адаптера терминала ISDN, требующего двух номеров.
сценарий
Если сценарий не определён в файле и не задан при помощи опции -f, то сценарий передаётся как параметры программы chat.
CHAT-СЦЕНАРИЙ
chat-сценарий определяет обмен сообщениями.
Сценарий состоит из одной или нескольких пар "ожидание/отправка", разделённых пробелами, с необязательной парой строк "под-ожидание/под-отправка", разделённой дефисом, как в следующем примере:
ogin:-BREAK-ogin: ppp ssword: hello2u2
Эта строка означает, что программе chat следует ожидать строку "ogin:". Если ей не удаётся получить запрос имени пользователя за предоставленный интервал, ей следует отправить последовательность сброса удалённой стороне и ожидать строку "ogin:" снова. Если первый "ogin:" получен, то последовательность сброса не передаётся.
После получения запроса имени пользователя, программа chat отправит строку ppp и будет ждать запроса "ssword:". После получения запроса пароля, она отправит пароль hello2u2.
Обычно после строки ответа отправляется символ возврата каретки. Его не ожидают получить в "ожидаемой" строке, если это не указано особо с помощью последовательности символов \r.
Ожидаемой последовательности следует содержать только то, что необходимо для идентификации строки. В норме она хранится в файле на диске, поэтому она не должна содержать изменяющейся информации. В общем недопустимо задавать в качестве ожидаемых последовательностей строки с указанием времени, с сетевой идентификацией или другими изменяющимися данными.
Чтобы не зависеть от символов, которые могут быть испорчены при начале передачи данных, задавайте строку "ogin:" вместо "login:". Вероятно что начальная "l" не будет получена из-за ошибки и вы никогда не дождётесь её, несмотря на то что удалённая система её отправила. По этой причине скрипты ищут "ogin:" вместо "login:" и "ssword:" вместо "password:".
Очень простой скрипт может выглядеть так:
ogin: ppp ssword: hello2u2
Иными словами, ждём ....ogin:, отправляем ppp, ждём ...ssword:, отправляем hello2u2.
На практике простые сценарии встречаются редко. Как минимум, вам следует включить обработку случаев, когда исходная строка так и не получена. Например, рассмотрим следующий скрипт:
ogin:--ogin: ppp ssword: hello2u2
Этот скрипт лучше, чем более простой, рассмотренный ранее. Он тоже ждёт того же запроса "login:", однако, если он его не получит, он отправит символ возврата каретки и опять будет ждать "login:". Если шум на линии испортит первый запрос "login:", отправка пустой строки обычно приводит к повтору приглашения "login:".
КОММЕНТАРИИ
В chat-сценарий могут быть включены комментарии. Комментарий - это строка, которая начинается с символа '#' (решётка) в первой позиции. Такие строки комментариев просто игнорируются программой chat. Если символ '#' является первым в ожидаемой строке, поставьте всю строку в кавычки. Если вам необходимо ждать запроса, начинающегося с #, напишите что-то вроде этого:
# Ждём запроса и отправляем команду logout
'# ' logout
ОТПРАВКА ДАННЫХ ИЗ ФАЙЛА
Если строка для отправки начинается с символа @, остальная часть строки считается именем файла, из которого следует брать строку для отправки. Если последний символ прочитанных оттуда данных - символ новой строки, он будет убран. Файл может быть именованным каналом (или fifo) вместо обычного файла. Это предоставляет программе chat способ общения с другой программой, например, с программой, которая спросит пользователя и получит набранный пароль.
СТРОКИ ABORT
Многие модемы отчитываются о состоянии вызова строкой. Эти строки могут быть CONNECTED, NO CARRIER или BUSY. Часто желательно завершать сценарий, если модем не смог связаться с удалённой стороной. Проблема в том, что сценарий не знает точно, какую именно строку модема он может получить. Один раз он может получить BUSY, а в следующий - NO CARRIER.
Эти строки сброса могут быть указаны в сценарии с помощью последовательности ABORT. Она записывается в сценарии, как в следующем примере:
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
Эта последовательность ничего не ожидает; и затем отправляет строку ATZ. Ожидаемый ответ - строка OK. Когда будет принята строка OK, строка ATDT5551212 совершит телефонный звонок. Теперь ожидается строка CONNECT. Если принята строка CONNECT, выполняется остаток сценария. Однако, если модем определит занятый телефон, он оправит строку BUSY. Это приведёт к совпадению с последовательностью символов сброса. Сценарий даст сбой, поскольку он нашёл совпадение со строкой сброса. Если он примет строку NO CARRIER, он даст сбой по тем же причинам. Может быть принята любая строка, каждая из них завершит chat-сценарий.
СТРОКИ CLR_ABORT
Эта последовательность позволяет очистить установленные до этого строки ABORT. Строки ABORT сохраняются в массиве заранее определённого (во время компиляции) размера; CLR_ABORT очистит занимаемое ими место, так что его смогут использовать новые строки.
СТРОКИ SAY
Директива SAY позволяет сценарию отправить строку для пользователя за терминалом через поток stderr. Если chat был запущен из pppd, и pppd запущен как демон (отключён от управляющего терминала), поток stderr обычно перенаправляется в файл /etc/ppp/connect-errors.
Строки SAY должны быть заключены в одинарные или двойные кавычки. Если требуется вывести строку, содержащую возврат каретки или перевод строки, вы должны явно добавить их к вашей строке.
Строки SAY могут использоваться для задания сообщений о процессе подключения в тех местах, где вы хотите отключить эхо с помощью 'ECHO OFF', но хотите дать знать пользователю о том, что происходит. Например так:
ABORT BUSY
ECHO OFF
SAY "Звоним провайдеру...\n"
'' ATDT5551212
TIMEOUT 120
SAY "Ждём подключения не дольше 2 минут...\n"
CONNECT ''
SAY "Подключение установлено, теперь входим...\n"
ogin: account
ssword: pass
$ SAY "Вошли...\n"
Эта последовательность будет представлена пользователю только строками SAY и все детали сценария останутся скрытыми. Например, при работе вышеуказанного сценария, пользователь увидит:
Звоним провайдеру...
Ждём подключения не дольше 2 минут...
Подключение установлено, теперь входим...
Вошли...
СТРОКИ REPORT
Строки отчётов похожи на строки ABORT. Разница в том, что строки и все символы до следующего управляющего символа, такого как возврат каретки, будут записаны в файл отчёта.
Строки отчёта могут использоваться для изолирования скорости передачи строки подключения модема и значения, возвращаемого пользователю chat. Анализ строк отчёта логически происходит совместно с другими строками, такими как поиск ожидаемой строки. Использование одинаковых строк для последовательностей отчёта и сброса не очень полезно, однако возможно.
Строки отчёта не изменяют кода завершения программы.
Строки отчёта могут быть указаны в сценарии с помощью последовательности REPORT. Они записываются в сценарий, как в следующем примере:
REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account
Эта последовательность ничего не ожидает; затем отправляет строку ATDT5551212 чтобы вызвать телефон. Ожидается строка CONNECT. Если строка CONNECT принята, выполняется остаток сценария. Вдобавок программа запишет в ожидаемый файл строку "CONNECT" и любые другие символы, такие как скорость подключения.
СТРОКИ CLR_REPORT
Эта последовательность позволяет очистить предыдущие настройки строк REPORT. Строки REPORT сохраняются в массиве предопределённого (при компиляции) размера; CLR_REPORT восстанавливает место занятое очищаемыми записями, так что новые строки могут использовать это место.
ECHO
Опция ECHO задаёт, будет ли вывод модема продублирован на stderr. Это поведение может быть установлено с помощью опции -e, но оно также может управляться ключевым словом ECHO. Пара "ожидание-оправка" ECHO ON включает эхо, а ECHO OFF отключает его. С этим ключевым словом вы можете выбрать, какие части диалога должны быть видимыми. Например, как в этом сценарии:
ABORT 'BUSY'
ABORT 'NO CARRIER'
OK\r\n ATD1234567
\r\n \c
ECHO ON
CONNECT \c
ogin: account
Все выводимые с модема результаты настройки и дозвона не видны, но начиная с сообщения CONNECT (или BUSY), всё будет дублироваться.
HANGUP
Опция HANGUP задаёт, следует ли считать ошибкой то, что модем положил трубку, или нет. Эта опция полезна в сценариях для звонков на системы, которые вешают трубку и делают ответный звонок. Опция HANGUP может быть включена (ON) или выключена (OFF).
Original (English): man chat(8) - Automated conversational script with a modem
Translation: © Владимир Ступин, маяк, bambrik, selitskas .
