NAZWA¶
chat - Zautomatyzowany skrypt dialogu z modemem
SKŁADNIA¶
chat [
options ]
script
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
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)
- \n
- 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.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 8 chat
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.