Provided by: manpages-pl_0.7-1_all bug

NAZWA

       chat - zautomatyzowany skrypt dialogu z modemem

SKŁADNIA

       chat [ opcje ] skrypt

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 plik
              Odczytuje  skrypt  rozmowy  z  pliku  plik.  Używanie  tej opcji wyklucza parametry
              skryptowe rozmowy. Użytkownik musi mieć prawa do odczytu tego  pliku.   Dozwolonych
              jest  wiele  wierszy w pliku. Do oddzielania napisów powinny być używana spacja lub
              tabulacja.

       -t czas-oczekiwania
              Ustawia czas oczekiwania dla  odbioru  oczekiwanego  łańcucha.  Jeśli  łańcuch  nie
              zostanie odebrany w limicie czasowym, to łańcuch odpowiedzi nie jest wysyłany. Może
              być natomiast wysłana alternatywna odpowiedź, lub skrypt może  zostać  przerwany  w
              wypadku  braku takiej alternatywy. Program chat zakończy wtedy działanie, zwracając
              niezerowy kod błędu. Można również podać łańcuch czas-oczekiwania, aby go określić.

       -r plik-raportu
              Ustaw plik dla wyjścia napisów raportujących. Jeżeli  używa  się  słowa  kluczowego
              REPORT,  napisy  wynikowe  są  zapisywane  do  tego  pliku. Jeśli opcja ta nie jest
              używana, można i tak używać słów REPORT, które użyją pliku stderr.

       -e     Zaczyna z włączoną opcją echo. Można  ją  również  włączyć  lub  wyłączyć  w  danym
              miejscu  skryptu  chat  za pomocą słowa kluczowego ECHO. Przy włączeniu opcji echo,
              całe wyjście z modemu jest przekierowane na standardowe wyjście błędów.

       -E     Włącza podmianę zmiennych środowiskowych w skryptach chat  za  pomocą  standardowej
              składni $xxx

       -v     Żąda  uruchomienia  skryptu  chat  w trybie szczegółowym. Program chat będzie wtedy
              logował wszystkie teksty  uzyskane  od  modemu,  a  także  te,  które  sam  wysyła.
              Domyślnie logi wysyłane są do SYSLOG, metodę logowania można zmienić opcjami -S lub
              -s.

       -V     Żąda uruchomienia skryptu chat w trybie szczegółowym, ale  na  standardowe  wyjście
              błędów.  Program będzie wówczas logował wszelki tekst otrzymany z modemu i łańcuchy
              wyjściowe wysyłane do modemu  do  urządzenia  stderr.  Urządzenie  to  jest  zwykle
              lokalną konsolą stacji uruchamiającej program chat lub pppd.

       -s     Używa  standardowego  wyjścia  błędów.  Wszystkie  komunikaty  loga  z  -v  wraz  z
              komunikatami o błędach będą wysyłane na stderr.

       -S     Nie używa SYSLOG. Domyślnie, komunikaty o błędach są wysyłane do SYSLOG-a. Opcja -S
              powoduje, że komunikaty z opcji -v i wiadomości o błędach nie będą tam wysyłane.

       -T numer telefonu
              Przekazuje  dowolny  łańcuch,  zwykle  numer  telefonu,  który zostanie wstawiony w
              miejsce metaznaku \T w wysyłanym łańcuchu.

       -U numer telefonu 2
              Przekazuje drugi łańcuch, zwykle numer telefonu, który zostanie wstawiony w miejsce
              metaznaku  \U  w  wysyłanym  łańcuchu.  Jest  to przydatne przy wybieraniu adaptera
              terminala ISDN wymagającego dwóch numerów.

       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 (minie czas
       oczekiwania), 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 znak zachęty logowania, chat spróbuje wysłać napis ppp i oczekiwać  na
       "ssword:". Gdy go odczyta, to wyśle hasło hello2u2.

       Na  zakończenie łańcucha odpowiedzi zwykle wysyłany jest znak powrotu karetki. 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
       łańcucha. Ponieważ normalnie jest przechowywana na dysku, nie powinna zawierać  informacji
       zmiennych.  Generalnie  nie  jest  akceptowane  podglądanie łańcuchów czasu, 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żna 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. Powinno się przynajmniej załączyć
       sekwencje "pod-oczekiwania". Proszę na przykład rozważyć następujący skrypt:

              ogin:--ogin: ppp ssword: hello2u2

       Byłby to lepszy skrypt niż poprzedni. Oczekiwałby na ten sam  znak  zachęty  login:,  lecz
       gdyby go nie odebrał, wysłałby sekwencję powrotu i oczekiwał dalej.  Gdyby więc szum linii
       zniekształcił pierwszy znak zachęty,  to  późniejsze  przesłanie  pustej  linii  zazwyczaj
       wygeneruje nowe.

KOMENTARZE

       Komentarze  można  osadzić  w  skrypcie programu chat. Komentarz to wiersz zaczynający się
       znakiem # (kratką) w kolumnie 1. Są ignorowane przez  program  chat.  Jeśli  znak  "#"  ma
       znaleźć  się  jako  pierwszy  znak oczekiwanej sekwencji, oczekiwany łańcuch należy ująć w
       cudzysłów. Aby czekać na zachętę rozpoczynającą się # (kratką) można użyć składni podobnej
       do poniższej:

              # Teraz czekaj na zachętę i wyślij łańcuch wylogowania
              '# ' logout

WYSYŁANIE DANYCH Z PLIKU

       Jeśli  łańcuch  przeznaczony  do  wysłania  zaczyna się małpą (@), to reszta łańcucha jest
       traktowana jako nazwa pliku do odczytania, z którego  wzięty  jest  łańcuch  do  wysłania.
       Jeśli  ostatnim  znakiem  odczytanych danych jest znak nowego wiersza, to jest on usuwany.
       Plik może być nazwanym potokiem (lub fifo), a nie tylko zwykłym plikiem. W ten sposób chat
       może  komunikować  się  z  innym programem np. z programem pytającym użytkownika o hasło i
       otrzymującym wpisane hasło.

ŁAŃCUCHY PRZERWANIA (ABORT)

       Wiele modemów raportuje status połączenia jako łańcuch. Łańcuchy 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  łańcuchy "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  łańcuch  ATDT5551212, wykręcający numer telefonu.
       Oczekiwanym napisem jest CONNECT. Jeśli  odebrany  zostanie  łańcuch  CONNECT,  to  reszta
       skryptu  jest  wykonywana.  Jednak  jeśli  modem spotka się z zajętą linią, to wyśle napis
       BUSY. Łańcuch ten będzie odpowiadał sekwencji przerwania. Skrypt wtedy zakończy działanie,
       ponieważ uzyskał rozkaz przerwania. Podobnie będzie, gdy skrypt uzyska łańcuch NO CARRIER.

ŁAŃCUCHY CLR_ABORT

       Sekwencja  ta  pozwala  cofnąć  wcześniej  ustawiony  łańcuch  ABORT.  Łańcuchy  ABORT  są
       przechowywane w tablicy o z góry zdefiniowanym rozmiarze (w trakcie kompilacji), CLR_ABORT
       odzyskają przestrzeń usuniętych wpisów, dzięki czemu nowe łańcuchy będą mogły jej użyć.

ŁAŃCUCHY "POWIEDZ" (SAY)

       Dyrektywa  SAY  pozwala  skryptowi na wysłanie łańcucha do użytkownika i na terminal przez
       standardowe wyjście błędów. Jeśli chat został uruchomiony  przez  pppd  działającego  jako
       demona  (odłączonego  od  kontrolującego go terminala), to standardowe wyjście błędów jest
       zwykle przekierowywane do pliku /etc/ppp/connect-errors.

       Łańcuchy SAY muszą być ujęte w pojedynczy lub podwójny  cudzysłów.  Jeśli  w  łańcuchu  ma
       pojawić  się  wyświetlany  powrót  karetki  i  wysuw wiersza, to trzeba dodać je jawnie do
       łańcucha.

       Łańcuchy SAY można wykorzystać do przekazania wiadomości o postępie w sekcjach  skryptu  z
       włączoną  opcją  "ECHO OFF", lecz gdzie wciąż istotne jest powiadomienie użytkownika o tym
       co się dzieje. Oto przykład:

              ABORT BUSY
              ECHO OFF
              SAY "Wybieranie numeru dostawcy...\n"
              ” ATDT5551212
              TIMEOUT 120
              SAY "Czekanie do 2 minut na połączenie... "
              CONNECT ”
              SAY "Połączono, teraz nastąpi zalogowanie...\n"
              ogin: account
              ssword: pass
              $ \c
              SAY "OK. Zalogowano...\n" etc ...

       Ta sekwencja wypisze użytkownikowi same łańcuchy SAY, a wszystkie detale skryptu pozostaną
       ukryte. W powyższym przykładzie użytkownik zobaczy:

              Wybieranie numeru dostawcy...
              Czekanie do 2 minut na połączenie... Połączono, teraz nastąpi zalogowanie...
              OK. Zalogowano...

ŁAŃCUCHY RAPORTOWE

       Napis  raportowy  jest  bardzo  podobny  do  napisu przerywania. Różnica polega na tym, że
       łańcuchy i wszystkie  znaki  do  następującego  znaku  sterującego,  takiego  jak  CR,  są
       wypisywane w pliku raportu.

       Łańcuchy  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.

       Łańcuchy 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  łańcuch  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.

ŁAŃCUCHY CLR_REPORT

       Sekwencja  ta  pozwala  cofnąć  wcześniej  ustawiony  łańcuch  REPORT.  Łańcuchy REPORT są
       przechowywane  w  tablicy  o  z  góry  zdefiniowanym  rozmiarze  (w  trakcie  kompilacji),
       CLR_REPORT  odzyskają  przestrzeń usuniętych wpisów, dzięki czemu nowe łańcuchy będą mogły
       jej użyć.

ECHO

       Opcje echo kontrolują czy wyjście z modemu jest  przekierowywane  na  standardowe  wyjście
       błędów.  Opcje  tę  można  ustawić  za pomocą -e, lecz można ją kontrolować również słowem
       kluczowych ECHO. Para "oczekuj-wysyłaj" ECHO ON włącza ją, a ECHO  OFF  -  wyłącza.  Słowo
       kluczowe  pozwala  wybranie  części  konwersacji  która  ma  być  widoczna.  Przykładowo w
       poniższym skrypcie:

              ABORT 'BUSY'
              ABORT 'NO CARRIER'
              ” ATZ
              OK\r\n ATD1234567
              \r\n \c
              ECHO ON
              CONNECT \c
              ogin: account

       niewidoczne są komunikaty wynikające z  konfiguracji  modemu  i  wybierania  numeru,  lecz
       poczynając od wiadomości CONNECT (lub BUSY) wszystko jest widoczne.

HANGUP

       Opcja  HANGUP kontroluje, czy rozłączenie modemu ma być traktowane jako błąd, czy też nie.
       Przydatne  w  skryptach  do  systemów  telefonicznych,  które  rozłączają  się  i  później
       oddzwaniają. Opcja HANGUP może być włączona (ON) lub wyłączona (OFF).
       Gdy HANGUP jest ustawione na OFF i modem rozłącza się (np. po pierwszej fazie logowania do
       systemu oddzwaniającego) chat kontynuuje wykonywanie skryptu (np. oczekując na  połączenie
       przychodzące  i  drugą  fazę  logowania).  Zaraz  po  zawiązaniu połączenia przychodzącego
       powinno się użyć dyrektywy HANGUP ON w celu ponownego  przywrócenia  zwykłego  zachowania.
       Oto (prosty) przykładowy skrypt:

              ABORT 'BUSY'
              ” ATZ
              OK\r\n ATD1234567
              \r\n \c
              CONNECT \c
              'Callback login:' call_back_ID
              HANGUP OFF
              ABORT "Bad Login"
              'Callback Password:' Call_back_password
              TIMEOUT 120
              CONNECT \c
              HANGUP ON
              ABORT "NO CARRIER"
              ogin:--BREAK--ogin: real_account
              etc ...

CZAS OCZEKIWANIA

       Początkowa  wartość  czasu  oczekiwania  to  45  sekund. Może to być zmienione przy użyciu
       parametru -t. Można również podać "TIMEOUT 0".

       Aby zmienić wartość czasu oczekiwania 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 assword: hello2u2

       Zmieni to czas oczekiwania na 10 sekund podczas oczekiwania zachęty login:. Następnie czas
       oczekiwania jest zmieniany na 5 sekund, podczas oczekiwania na czas oczekiwania password.

       Zmieniony czas oczekiwania 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 (koniec pliku). Nie przesyłany jest
       po niej znak return. EOT można umieścić w wysyłanym łańcuchu za pomocą sekwencji ^D.

GENEROWANIE PRZERWANIA (BREAK)

       Specjalny łańcuch 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  znak  zachęty  logowania.  Przerwanie można umieścić w
       wysyłanym łańcuchu za pomocą sekwencji \K.

SEKWENCJE UCIECZKI

       Łańcuchy oczekiwania i odpowiedzi mogą zawierać sekwencje ucieczki. Wszystkie sekwencje są
       poprawne w łańcuchu odpowiedzi. Wiele jest prawidłowe w napisie oczekiwania. Te, które nie
       są poprawne w sekwencji oczekiwania, są zaznaczone.

             Oczekuje lub wysyła łańcuch zerowy. W takim przypadku wysyłany  jest  znak  return.
              Sekwencja ta może być zarówno parą apostrofów, jak i cudzysłowów.

       \b     reprezentuje znak backspace.

       \c     Powstrzymuje  generowanie  nowego  wiersza  na  końcu  łańcucha 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.
              (nieprawidłowe w łańcuchu oczekiwania).

       \d     Zatrzymuje się na sekundę. Program używa sleep(1), który zatrzyma  się  maksymalnie
              na sekundę.  (nieprawidłowe w łańcuchu oczekiwania)

       \K     Wstawia BREAK (nieprawidłowe w łańcuchu oczekiwania)

       \n     Przesyła znak nowego wiersza lub powrotu wysuwu wiersza.

       \N     Przesyła   znak   null.  Ta  sama  sekwencja  może  być  reprezentowana  przez  \0.
              (nieprawidłowe w łańcuchu oczekiwania)

       \p     Pauzuje na część sekundy. Opóźnienie wynosi 1/10 sekundy.  (nieprawidłowe w łańuchu
              oczekiwania)

       \q     Zabrania  zapisywania napisu do pliku SYSLOG. Do dziennika w jego miejscu wpisywany
              jest napis ???????.    (nieprawidłowe w łańuchu oczekiwania)

       \r     Wysyła lub oczekuje znak powrotu karetki.

       \s     Reprezentuje znak spacji w łańuchu. Może to być używane,  gdy  nie  jest  pożądanym
              cytowanie   łańcuchów  zawierających  spacje.  Sekwencje  'HI  TIM'  i  HI\sTIM  są
              identyczne.

       \t     Wysyła lub oczekuje znaku tabulacji.

       \T     Wysyła  łańcuch  numeru  telefonu  podany  opcją  -T.  (nieprawidłowe   w   łańuchu
              oczekiwania)

       \U     Wysyła  łańcuch  numeru  telefonu  2  podany  opcją  -U.  (nieprawidłowe  w łańuchu
              oczekiwania)

       \\     Wysyła lub oczekuje znak odwrotnego ukośnika.

       \ddd   Przekształca ósemkowe cyfry (ddd) w  pojedynczy  znak  ASCII  i  wysyła  ten  znak.
              (niektóre znaki nie  używane w sekwencji oczekiwania)

       ^C     Podmienia  sekwencję  znakiem  sterującym  (z  Ctrl)  reprezentowanym  przez C.  Na
              przykład znak DC1 (17) jest pokazywany jako ^Q.  (niektóre znaki nie   używane  w
              sekwencji oczekiwania)

ZMIENNE ŚRODOWISKOWE

       Zmienne  środowiskowe są dostępne w skryptach chat, jeśli w wierszu polecenia podano opcję
       -E. Metaznak $ jest używany do wprowadzenia  nazwy  zmiennej  środowiskowej  do  podmiany.
       Jeśli zamiana zawiedzie, ponieważ taka zmienna nie jest ustawiona, nic nie jest zamieniane
       zmienną.

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 minięcie czasu oczekiwania dla napisu oczekiwania, który nie miał  napisu
              "pod-wysłania".  Może  to  oznaczać, że nie zaprogramowano 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 łańcuch oznaczony jako warunek ABORT.

       5      Pojawił się drugi łańcuch oznaczony jako warunek ABORT.

       6      Pojawił się trzeci łańcuch oznaczony jako warunek ABORT.

       7      Pojawił się czwarty łańcuch oznaczony jako warunek ABORT.

       ...    Inne kody wyjścia są również łańcuchami oznaczonymi 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 DIAL  TONE".  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. Skrypty programu
       chat powstały z idei zaproponowanych przy skrypt programu uucico.

       uucico(1), uucp(1)

PRAWA AUTORSKIE

       Program chat jest znajduje się w domenie publicznej. Nie jest to publiczna  licencja  GNU.
       Autorzy nie udzielają żadnej gwarancji.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM)
       <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów  na
       stronie   http://sourceforge.net/projects/manpages-pl/.   Jest   zgodne  z  wersją   2.4.6
       oryginału.