CHAT(8) | System Manager's Manual | CHAT(8) |
NAZWA¶
chat - Zautomatyzowany skrypt dialogu z modemem
SKŁADNIA¶
chat [ options ] script
OPIS¶
Program chat definiuje wymianę rozmów między komputerem a modemem. Jego głównym celem jest zestawianie połączeń pomiędzy demonem Point-To-Point (pppd), a procesem pppd drugiego końca.
OPCJE¶
- -f <chat file>
- Odczytaj skrypt rozmowy z pliku file. Używanie tej opcji wyklucza parametry skryptowe rozmowy. Użytkownik musi mieć prawa do odczytu tego pliku. Dozwolonych jest wiele linii w pliku. Do oddzielania napisów powinny być używana spacja lub tabulacja.
- -t <timeout>
- Ustaw timeout dla odbioru oczekiwanego napisu. Jeśli napis nie zostanie odebrany w limicie czasowym, to napis odpowiedzi nie jest wysyłany. Może być natomiast wysłana alternatywna odpowiedź, lub skrypt może zostać przerwany w wypadku braku takiej alternatywy. Chat zakończy wtedy działanie, zwracając niezerowy kod błędu.
- -r <report file>
- Ustaw plik dla wyjścia napisów raportujących. Jeżeli używasz słowa kluczowego REPORT, napisy wynikowe są zapisywane do tego pliku. Jeśli opcja ta nie jest używana, możesz i tak używać słów REPORT, które użyją pliku stderr.
- -v
- Żądaj uruchomienia skryptu chat w trybie verbose (gadatliwym). Program chat będzie wtedy logował wszystkie teksty uzyskane od modemu, a także te, które sam wysyła. Logi wysyłane są do SYSLOG.
- -V
- Żądaj uruchomienia skryptu chat w trybie verbose (gadatliwym), ale na stderr. (tym się to różni od powyższego). Urządzenie to jest zwykle lokalną konsolą stacji uruchamiającej program chat lub pppd. Opcja ta nie będzie działać prawidłowo, jeśli stderr jest przekierowane na /dev/null, co ma miejsce gdy pppd działa w trybie `detached' (odłączonym od konsoli). W tym wypadku użyj opcji `-v' do zapisywania sesji na urządzeniu SYSLOG.
- script
- Jeśli skrypt nie jest podany opcją -f w pliku, to skrypt script jest włączany jako parametry programu chat.
SKRYPT ROZMOWY¶
Skrypt rozmowy definiuje komunikację.
Skrypt składa się z jednej lub większej ilości par napisów "oczekuj-wysyłaj", oddzielonych spacjami z ewentualnymi dodatkowymi parami "podoczekuj-podwysyłaj", oddzielonymi kreską, jak w przykładzie:
- ogin:-BREAK-ogin: ppp ssword: hello2u2
Znaczy to, że chat powinien oczekiwać napisu "ogin:". Jeśli to zawiedzie (nastąpi timeout), to wysyła na drugi koniec sekwencję przerwania (break) i oczekuje napisu "ogin:". Jeśli jednak pierwszy "ogin:" zostanie odebrany, sekwencja przerwania nie jest wysyłana.
Gdy już uzyskaliśmy prompt logina, chat spróbuje wysłać napis ppp i oczekiwać na prompt "ssword:". Gdy odczyta ten prompt, to wyśle hasło, hello2u2.
Na zakończenie napisu odpowiedzi zwykle wysyłany jest CR. Nie jest on oczekiwany w napisie "oczekiwania", chyba że jest specyficznie wskazany, przez użycie sekwencji \r.
Sekwencja oczekiwania powinna zawierać tylko to, co potrzebne do zidentyfikowania napisu. Ponieważ normalnie jest przechowywana na dysku, nie powinna zawierać informacji zmiennych. Generalnie nie jest akceptowane podglądanie napisów czasowych, identyfikacji sieci, lub innych zmiennych jako sekwencji oczekiwanej.
Aby pomóc poprawić znaki, które mogą być zmienione w sekwencji początkowej, oczekuj raczej napisu "ogin:" niż "login:". Jest możliwe, że początkowy znak będzie odebrany z błędem, a wtedy możesz nigdy nie znaleźć oczekiwanego napisu, chociaż został on wysłany przez system. Z tego powodu, skrypty oczekują "ogin:" zamiast "login:" i "ssword:" zamiast "password".
Bardzo prosty skrypt może wyglądać następująco:
- ogin: ppp ssword: hello2u2
Innymi słowy, oczekuj ....ogin:, wyślij ppp, oczekuj ...ssword:, wyślij hello2u2.
W rzeczywistości proste skrypty są raczej rzadkie. Przynajmniej powinieneś załączyć sekwencje "pod-oczekiwania". Np. rozważ następujący skrypt:
- ogin:--ogin: ppp ssword: hello2u2
Byłby to lepszy skrypt niż poprzedni. Oczekiwałby na ten sam prompt login:, lecz gdyby go nie odebrał, wysłałby sekwencję powrotu i oczekiwał dalej. Gdyby więc szum linii zniekształcił pierwszy prompt, to późniejsze przesłanie pustej linii zazwyczaj wygeneruje nowy prompt.
STRINGI PRZERWANIA (ABORT)¶
Wiele modemów raportuje status połączenia jako napisy. Napisy te to np. CONNECTED, NO CARRIER, lub BUSY. Często jest właściwym wyłączenie skryptu, jeśli modem nie połączy się z drugim końcem. Przy jednej próbie może odebrać BUSY, podczas gdy następnym razem zdarzyć się może NO CARRIER.
Te napisy "przerywania" mogą być podane w skrypcie przy użyciu sekwencji ABORT. Jest to zapisane w poniższym przykładzie:
- ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
Sekwencja ta nie będzie niczego oczekiwać; później wyśle ATZ. Oczekiwaną odpowiedzią jest OK. Po odebraniu OK, wysyłany jest napis ATDT5551212, wykręcający numer telefonu. Oczekiwanym napisem jest CONNECT. Jeśli odebrany zostanie napis CONNECT, to reszta skryptu jest wykonywana. Jednak jeśli modem spotka się z zajętą linią, to wyśle napis BUSY. Napis ten będzie odpowiadał sekwencji przerwania. Skrypt wtedy zakończy działanie, ponieważ uzyskał rozkaz przerwania. Podobnie będzie, gdy skrypt uzyska napis NO CARRIER.
STRINGI RAPORTOWE¶
Napis raportowy jest bardzo podobny do napisu przerywania. Różnica polega na tym, że napisy i wszystkie znaki do następującego znaku sterującego, takiego jak CR, są wypisywane w pliku raportu.
Napisy raportu mogą być używane do izolowania ze napisu połączenia ciągu określającego szybkość transmisji i zwracania wartości użytkownikowi. Analiza logiki napisu raportowego występuje w połączeniu z innym przetwarzaniem napisu, takim jak podglądanie napisu oczekiwanego. Użycie tego samego napisu jako przerywający i raportowy, prawdopodobnie nie jest zbyt użyteczne, jednak jest możliwe.
Napisy raportowe nie wpływają na kod zakończenia programu.
Napisy raportowe mogą być podawane w skrypcie przy użyciu sekwencji REPORT. Jest to zapisywane w skrypcie jak w następującym przykładzie.
- REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account
Sekwencja ta nie będzie oczekiwać niczego; a potem wyśle napis ATDT5551212, wykręcający numer telefonu. Oczekiwanym napisem jest CONNECT. Jeśli napis ten jest odebrany, wykonywana jest reszta skryptu. Dodatkowo, program wydrukuje do oczekującego pliku napis CONNECT plus dodatkowo znaki, które za nim podążały, takie jak szybkość połączenia.
TIMEOUT¶
Początkowa wartość timeoutu to 45 sekund. Może to być zmienione przy użyciu parametru -t.
Aby zmienić wartość timeoutu dla następnego z oczekiwanych napisów, można użyć następującego przykładu:
- ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assowrd: hello2u2
Zmieni to timeout na 10 sekund podczas oczekiwania promptu login:. Następnie timeout jest zmieniany na 5 sekund, podczas oczekiwania na prompt password:.
Zmieniony timeout pozostaje efektywny aż do następnej zmiany.
WYSYŁANIE EOT¶
Specjalny napis odpowiedzi, EOT, wskazuje, że program chat powinien wysłać znak EOT na drugi koniec. Normalnie jest to sekwencja End-of-file. Nie przesyłany jest po niej znak return. Sekwencja EOT może być załączona do wysyłanego napisu przy użyciu sekwencji ^D.
GENEROWANIE PRZERWANIA (BREAK)¶
Specjalny napis odpowiedzi, BREAK, spowoduje wysłanie warunku przerwania. Sygnał ten jest specjalnym sygnałem. Normalną akcją u odbierającego go jest zmiana szybkości transmisji. Może być używany do przeskakiwania przez dostępne szybkości transmisji, aż będzie można odebrać prawidłowy prompt logina. Sekwencja przerwania może być załączona do wysyłanego napisu przy użyciu sekwencji \K.
SEKWENCJE ESKEJPOWE¶
Napisy oczekiwania i odpowiedzi mogą zawierać sekwencje eskejpowe. Wszystkie sekwencje są legalne w napisie odpowiedzi. Wiele jest legalnych w napisie oczekiwania. Te, które nie są legalne w sekwencji oczekiwania, są zaznaczone.
- ''
- Oczekuje lub wysyła napis zerowy. Jeśli wysyłasz napis zerowy, to wysyłany będzie znak return. Sekwencja ta może być zarówno parą apostrofów, jak i znaków cytowania.
- \b
- reprezentuje znak backspace.
- \c
- Powstrzymuje generowanie nowej linii na końcu napisu odpowiedzi. Jest to jedyna metoda wysyłania napisu bez kończącego go znaku return. Musi być wysyłana na końcu napisu. Na przykład sekwencja hello\c prześle po prostu znaki h, e, l, l, o. (nie używane w napisie oczekiwania)
- \d
- Zatrzymaj się na sekundę. Program użyj sleep(1), który zatrzyma się maksymalnie na sekundę. (nie używane w napisie oczekiwania)
- \K
- Wstaw BREAK (nie używane w napisie oczekiwania)
- Prześlij znak nowej linii.
- \N
- Prześlij znak null. Ta sama sekwencja może być reprezentowana przez \0. (nie używane w napisie oczekiwania)
- \p
- Pauzuj na część sekundy. Opóźnienie wynosi 1/10 sekundy. (nie używane w sekwencji oczekiwania)
- \q
- Zabroń zapisywania napisu do pliku SYSLOG. Do logu w jego miejscu wpisywany jest napis ???????. (nie używane w sekwencji oczekiwania)
- \r
- Wyślij lub oczekuj CR.
- \s
- Reprezentuje znak spacji w napisie. Może to być używane, gdy nie jest pożądanym cytowanie napisów zawierających spacje. Sekwencje 'HI TIM' i HI\sTIM są identyczne.
- \t
- Wyślij lub oczekuj znaku tabulacji.
- Wyślij lub oczekuj znaku odwrotnego ukośnika.
- \ddd
- Przekształć ósemkowe cyfry (ddd) w pojedynczy znak ASCII i wyślij ten znak. (niektóre znaki nie są używane w sekwencji oczekiwania)
- ^C
- Podmień sekwencję znakiem sterującym (z Ctrl) reprezentowanym przez C. Na przykład znak DC1 (17) jest pokazywany jako ^Q. (niektóre znaki nie są używane w sekwencji oczekiwania)
KODY ZAKOŃCZENIA¶
Program chat kończy swoje działanie z następującymi kodami wyjścia.
- 0
- Normalne zakończenie programu. Znaczy to, że skrypt został wykonany bez błędów.
- 1
- Jeden, lub więcej parametrów było nieprawidłowych, lub napis oczekiwania był zbyt duży dla buforów wewnętrznych. Wskazuje to, że program nie był prawidłowo uruchomiony.
- 2
- Pojawił się błąd podczas uruchomiania programu. Może to być spowodowane błędem operacji odczytu lub zapisu, lub odebraniem przez program sygnału takiego, jak SIGINT.
- 3
- Nastąpiło zdarzenie timeoutu dla napisu oczekiwania, który nie miał napisu "pod-wysłania". Może to oznaczać, że nie zaprogramowałeś właściwie skryptu na ten warunek, lub że pojawiło się jakieś nieoczekiwane zdarzenie i oczekiwany napis nie mógł zostać znaleziony.
- 4
- Pojawił się pierwszy napis zaznaczony jako warunek ABORT.
- 5
- Pojawił się drugi napis zaznaczony jako warunek ABORT.
- 6
- Pojawił się trzeci napis zaznaczony jako warunek ABORT.
- 7
- Pojawił się czwarty napis zaznaczony jako warunek ABORT.
- ...
- Inne kody wyjścia są również napisami zaznaczonymi jako ABORT.
Używając kodu wyjścia, możliwym jest określenie, które zdarzenie zakończyło skrypt. Jest możliwym określenie czy modem otrzymał np. napis "BUSY" czy "NO DIALTONE". Podczas gdy pierwsze zdarzenie wymaga drugiej próby, drugie w ten sposób może mieć mniejsze szanse.
ZOBACZ TAKŻE¶
Dodatkowe informacje o skryptach chat można znaleźć w dokumentacji UUCP.
uucico(1), uucp(1)
COPYRIGHT¶
Program chat jest w public domain. Nie jest to licencja GNU.
5 Maj 1995 | Chat Wersja 1.9 |