Provided by:
manpages-pl_20060617-1_all 
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 uywane w
napisie oczekiwania)
\d Zatrzymaj się na sekundę. Program użyj sleep(1), który zatrzyma
się maksymalnie na sekundę. (nie uywane w napisie oczekiwania)
\K Wstaw BREAK (nie uywane w napisie oczekiwania)
\n Prześlij znak nowej linii.
\N Prześlij znak null. Ta sama sekwencja może być reprezentowana
przez \0. (nie uywane w napisie oczekiwania)
\p Pauzuj na część sekundy. Opóźnienie wynosi 1/10 sekundy. (nie
uywane w sekwencji oczekiwania)
\q Zabroń zapisywania napisu do pliku SYSLOG. Do logu w jego
miejscu wpisywany jest napis ???????. (nie uywane 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. (niektre znaki nie s uywane w sekwencji
oczekiwania)
^C Podmień sekwencję znakiem sterującym (z Ctrl) reprezentowanym
przez C. Na przykład znak DC1 (17) jest pokazywany jako ^Q.
(niektre znaki nie s uywane 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.