Provided by:
manpages-fr_1.67.0-1_all 
NOM
chat - Script de conversation automatisée avec un modem
SYNOPSIS
chat [ options ] script
DESCRIPTION
Le programme chat régit une « conversation » entre l’ordinateur et le
modem. Son but premier est d’établir la connexion entre pppd, le démon
du Protocole Point à Point, et le processus pppd distant.
OPTIONS
-f <fichier chat>
Utilise le script chat du fichier chat. L’utilisation de cette
option et celle des paramètres de chat sont mutuellement
exclusives. L’utilisateur doit avoir le droit de lecture sur le
fichier. Le fichier peut comporter plusieurs lignes ; les blancs
et les caractères de tabulation sont utilisables pour séparer
les chaînes.
-t <temps limite>
Fixe le temps limite (en secondes) d’attente d’une chaîne. Si la
chaîne n’est pas reçue dans ce laps de temps, la chaîne-réponse
n’est pas envoyée. Une chaîne alternative peut être envoyée.
S’il n’y en a pas, le script s’arrêtera sur une erreur. Dans ce
cas, le programme chat se terminera avec une valeur de retour
non nulle.
-r <fichier rapport>
Détermine le fichier devant contenir les chaînes de rapport
(voir ci-dessous). Si vous précisez le mot-clef REPORT dans le
script, les chaînes suivant celui-ci seront écrites dans ce
fichier. Si cette option n’est pas utilisée, mais que vous
mentionnez quand même REPORT dans le script, la sortie standard
(stderr) sera utilisée pour le rapport des chaînes transmises.
-e Démarre avec l’option echo activée. Cette option peut aussi être
activée ou désactivée en des points spécifiques du script chat,
en utilisant le mot-clef ECHO. Quand echo est activée, toutes
les sorties du modem sont envoyées vers stderr.
-E Active la substitution des variables d’environnement Ã
l’intérieur des scripts chat, grâce à la syntaxe standard $xxx.
-v Demande que le script chat soit exécuté en mode bavard. Le
programme chat enregistrera alors l’état d’exécution du script,
en plus des chaînes reçues et envoyées au modem. La méthode par
défaut d’enregistrement est d’utiliser le SYSLOG ; elle peut
être modifiée par les drapeaux -S et -s.
-V Demande que le script chat soit exécuté en mode bavard sur
stderr. Le programme chat affichera alors sur la sortie
standard toutes les chaînes reçues et envoyées au modem. La
sortie standard est généralement la console locale de
l’ordinateur exécutant le programme chat ou pppd.
-s Utilise la sortie standard (stderr). Tous les messages
d’enregistrement générés par -v et tous les messages d’erreur
seront envoyés vers stderr.
-S N’utilise pas le SYSLOG. Par défaut, les messages d’erreur sont
envoyés vers SYSLOG. L’utilisation de -S empêchera les messages
générés par -v et les messages d’erreur d’être envoyés vers le
SYSLOG.
-T <n° tél.>
Passe une chaîne arbitraire, habituellement un numéro de
téléphone, qui sera substituée au métacaractère de substitution
\T dans une chaîne d’envoi.
-U <2e n° tél.>
Passe une deuxième chaîne, habituellement un numéro de
téléphone, qui sera substituée au métacaractère de substitution
\U dans une chaîne d’envoi. C’est utile pour appeler un modem
RNIS, qui a besoin de deux numéros.
script Si le script n’est pas lu dans un fichier avec l’option -f, il
doit être inclus sous forme de paramètres du programme chat.
SCRIPT CHAT
Le script chat régit les communications.
Un script consiste en une ou plusieurs paires de chaînes
attendue/envoyée (expect/send), séparées par des espaces, avec une
paire optionnelle « sous-attendue/sous-envoyée » (subexpect-subsend),
séparées par un tiret, comme dans l’exemple suivant :
ogin:-BREAK-ogin: ppp ssword: hello2u2
Cette ligne indique au programme chat d’attendre la chaîne « ogin: ».
S’il ne reçoit pas d’invite de login dans l’intervalle de temps alloué,
il doit envoyer une séquence d’interruption (BREAK) à son
correspondant, puis attendre à nouveau la chaîne « ogin: ». Si le
premier ogin: » est reçu, la séquence d’interruption n’est pas
envoyée.
Dès qu’il aura reçu l’invite de login, le programme chat enverra la
chaîne « ppp », puis attendra l’invite « ssword: ». À sa réception, il
enverra le mot de passe « hello2u2 ».
Un retour chariot suit normalement chaque chaîne envoyée. En revanche,
aucun retour chariot n’est prévu dans une chaîne attendue, à moins
qu’il ne soit spécifiquement exigé en utilisant la séquence de
caractères « \r ».
La chaîne attendue ne devrait contenir que le strict nécessaire pour
identifier la chaîne. Comme elle est normalement stockée dans un
fichier sur le disque, elle ne devrait pas contenir d’information
variable, comme des heures, des durées, des identifications de réseau.
Pour être moins sensible aux caractères qui pourraient être corrompus
pendant la séquence initiale, attendez la chaîne « ogin: » plutôt que
« login: ». Il est possible que le « l » initial soit mal reçu, et
dans ce cas chat ne trouvera jamais la chaîne attendue. Pour la même
raison, les scripts attendent « ssword: » plutôt que « password: ».
Un script très simple pourrait ressembler à ceci :
ogin: ppp ssword: hello2u2
En clair, attend ....ogin:, envoie ppp, attend ...ssword:, envoie
hello2u2.
Dans la pratique, les scripts simples sont rares. Au minimum, vous
devriez inclure des séquences « sous-attendues » au cas où la chaîne
d’origine ne soit pas reçue. Par exemple, examinez le script suivant :
ogin:--ogin: ppp ssword: hello2u2
C’est un script un peu meilleur que celui, simpliste, utilisé
précédemment. Il attend la même invite « login: », mais si elle n’est
pas reçue, il envoie un simple retour chariot, puis se remet en attente
de « login: ». Si du bruit sur la ligne interfère avec la première
invite, l’envoi d’une ligne vide génère habituellement une nouvelle
invite.
COMMENTAIRES
Des commentaires peuvent être inclus dans un script chat. Un
commentaire est une ligne commençant par un caractère # (dièse) en
première colonne. Ces lignes sont simplement ignorées par le programme
chat. Si un caractère # est le premier caractère d’une chaîne attendue,
cette chaîne doit être placée entre guillemets :
# Attend maintenant l’invite puis envoie la chaîne
# « logout » (déconnexion)
’# ’ logout
ENVOYER DES DONNÉES DEPUIS UN FICHIER
Si la chaîne à envoyer commence par une arobase (@), le reste de la
chaîne est considéré comme le nom d’un fichier à lire pour obtenir la
chaîne à envoyer. Si le dernier caractère des données lues est un saut
de ligne, il est supprimé. Le fichier peut être un tube nommé (ou
fifo) au lieu d’un fichier régulier. Cela fournit à chat un moyen de
communiquer avec un autre programme, par exemple un programme qui
affiche une invite et reçoit un mot de passe entré par l’utilisateur.
CHAÃŽNES Dâ€â€™ABANDON (ABORT)
La plupart des modems signalent l’état de la communication sous forme
d’une chaîne. Ces chaînes peuvent être CONNECTED (connecté), NO CARRIER
(pas de porteuse), ou BUSY (occupé). Il est souvent préférable de
terminer le script si le modem échoue à se connecter à son
correspondant. La difficulté est qu’un script ne peut pas savoir
exactement quelle chaîne il risque de recevoir du modem. Lors d’une
tentative, il peut recevoir BUSY, alors qu’à la suivante, il recevra NO
CARRIER.
Ces chaînes d’abandon (abort) peuvent être spécifiées dans le script
avec le mot-clef ABORT, comme dans l’exemple suivant :
ABORT BUSY ABORT ’NO CARRIER’ ’’ ATZ OK ATDT5551212 CONNECT
Cette séquence n’attend rien, et envoie la chaîne ATZ (initialisation
modem). La réponse attendue est la chaîne OK. À sa réception, il
envoie la chaîne ATDT5551212 pour composer le numéro. La chaîne
attendue est alors CONNECT. Dès qu’elle est reçue, le reste du script
est exécuté. Mais si le modem tombe sur une ligne occupée, il enverra
la chaîne BUSY, qui correspondra à une des chaînes d’abandon. De même
si le programme reçoit NO CARRIER. Les deux chaînes seront reconnues,
et termineront toutes deux le script.
RÉINITIALISATION DES CHAÃŽNES Dâ€â€™ABANDON (CLR_ABORT)
Cette séquence permet d’effacer les chaînes ABORT précédemment
spécifiées. Les chaînes ABORT sont gardées dans un tableau de taille
prédéterminée (à la compilation) ; CLR_ABORT récupère l’espace des
entrées effacées, qui peut alors être utilisé par les nouvelles
chaînes.
CHAÃŽNES SAY
La directive SAY permet au script d’envoyer des chaînes Ã
l’utilisateur, à travers la sortie d’erreur standard du terminal. Si
chat est lancé par pppd, et que pppd tourne comme démon (détaché de son
terminal de contrôle), l’erreur standard sera normalement redirigée
vers le fichier /etc/ppp/connect-errors.
Les chaînes SAY doivent être entre apostrophes simples ou doubles. Si
un retour chariot ou un saut de ligne est nécessaire en sortie, vous
devez l’ajouter explicitement à la chaîne.
Les chaînes SAY peuvent être utilisées pour afficher des messages de
progression dans des sections du script en « ECHO OFF », mais pendant
lesquelles vous voulez tout de même tenir l’utilisateur au courant de
ce qui se passe. Voici un exemple :
ABORT BUSY
ECHO OFF
SAY "J’appelle votre FAI...\n"
’’ ATDT5551212
TIMEOUT 120
SAY "J’attends la connexion jusqu’à 2 minutes... "
CONNECT ’’
SAY "Connecté, maintenant je me logue...0
ogin: utilisateur
ssword: pass
$ SAY "OK, logué...0 etc ...
Cette séquence ne présentera à l’utilisateur que les chaînes SAY, et
lui épargnera tous les détails. Par exemple, si le script ci-dessus
fonctionne, l’utilisateur verra :
J’appelle votre FAI...
J’attends la connexion jusqu’à 2 minutes... Connecté, maintenant
je me loggue...
OK, loggué...
CHAÃŽNES DE RAPPORT
Une chaîne de rapport (report) est similaire à une chaîne ABORT. La
différence est que les chaînes, ainsi que tous les caractères jusqu’au
prochain caractère de contrôle (comme le retour chariot), sont écrites
dans le fichier de rapport.
Les chaînes de rapport peuvent être utilisées pour extraire le débit de
la chaîne de connexion envoyée par le modem, et envoyer la valeur Ã
l’utilisateur de chat. L’analyse des chaînes de rapport se pratique
idéalement couplée avec d’autres traitements, comme l’attente d’une
chaîne. L’utilisation d’une même chaîne dans deux séquences REPORT et
ABORT n’est probablement pas très utile, mais elle est toutefois
possible.
Les chaînes de rapport ne modifient pas la valeur de retour du
programme.
Ces chaînes de rapport peuvent être spécifiées dans le script par le
mot-clef REPORT, comme dans l’exemple suivant :
REPORT CONNECT ABORT BUSY ’’ ATDT5551212 CONNECT ’’ ogin:
account
Cette séquence n’attend rien, et envoie la chaîne ATDT5551212 pour
composer le numéro. La chaîne attendue est CONNECT. Si elle est reçue,
le reste du script est exécuté. En outre, le programme écrira dans le
fichier de rapport la chaîne « CONNECT », plus tous les caractères qui
la suivent, comme le débit.
RÉINITIALISATION DES CHAÎNES DE RAPPORT (CLR_REPORT)
Cette séquence permet d’effacer les chaînes REPORT précédemment
spécifiées. Les chaînes REPORT sont gardées dans un tableau de taille
prédéterminée (à la compilation) ; CLR_REPORT récupère l’espace des
entrées effacées, qui peut alors être utilisé par les nouvelles
chaînes.
ECHO
L’option echo contrôle si la sortie du modem doit être dupliquée vers
stderr. Cette option peut être activée avec l’option -e sur la ligne de
commande, mais peut aussi être contrôlée par le mot-clef ECHO dans le
script. La paire « attendue/envoyée » ECHO ON active l’option, et ECHO
OFF la désactive. Grâce à ce mot-clef, vous pouvez sélectionner quelles
parties de la conversation doivent être visibles. Par exemple, avec le
script suivant :
ABORT ’BUSY’
ABORT ’NO CARRIER’
’’ ATZ
OK\r\n ATD1234567
\r\n \c
ECHO ON
CONNECT \c
ogin: account
toutes les sorties résultant de la configuration du modem et de la
numérotation restent invisibles, alors que tout est visible à partir du
message CONNECT (ou BUSY).
HANGUP
L’option HANGUP contrôle si un raccrochage du modem doit être considéré
comme une erreur ou pas. Cette option est utile dans les scripts pour
les systèmes de rappel, qui raccrochent et rappellent votre système.
Les options de HANGUP peuvent être ON ou OFF.
Si HANGUP est réglé à OFF et que le modem raccroche (par exemple, à la
fin de la première étape de connexion à un système de rappel), chat
continuera d’exécuter le script (par exemple, par l’attente d’un appel
entrant et d’une invite de login en début de seconde étape). Dès que
l’appel entrant est pris, vous pouvez utiliser la directive HANGUP ON
pour réinstaurer le comportement normal au signal de raccrochage. Voici
un script (simple) d’exemple :
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 ...
DÉLAI Dâ€â€™EXPIRATION (TIMEOUT)
Le délai d’expiration (timeout) initial est de 45 secondes. Il peut
être changé par le paramètre -t de la ligne de commande.
Pour changer la valeur du délai pour la prochaine chaîne attendue,
inspirez-vous de l’exemple suivant :
ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5
assword: hello2u2
Cela fixe le délai d’expiration à 10 secondes pendant l’attente de
l’invite login: ». Puis ce délai est ramené à 5 secondes pendant
l’attente de l’invite de mot de passe.
Une fois modifié, le nouveau délai reste en vigueur jusqu’à ce qu’il
soit à nouveau changé.
ENVOYER UN EOT
La chaîne d’envoi spéciale EOT indique que le programme chat doit
envoyer un caractère EOT (End Of Transmission, fin de transmission) Ã
son correspondant. Normalement, c’est la séquence de caractères End-of-
file (fin de fichier). Aucun caractère de retour n’est envoyé après
l’EOT. La séquence EOT peut être incluse dans une chaîne d’envoi en
utilisant la séquence ^D.
GÉNÉRER UNE INTERRUPTION (BREAK)
La chaîne d’envoi spéciale BREAK envoie une interruption. Il s’agit
d’un signal spécial généré par le modem (NdT : courte interruption de
la porteuse). Des interruptions peuvent être utilisées pour changer
cycliquement de débit de transmission, parmi ceux disponibles chez le
correspondant, jusqu’à ce que vous receviez une invite valide. La
séquence d’interruption peut être incluse dans une chaîne d’envoi en
utilisant la séquence \K.
SÉQUENCES Dâ€â€™Ã‰CHAPPEMENT
Les chaînes attendues et envoyées peuvent contenir des séquences
d’échappement. Elles sont toutes autorisées dans les chaînes de
réponse (envoyées), la plupart le sont dans les chaînes attendues.
Celles qui ne le sont pas sont signalées.
â€â€™â€â€™ Attend ou envoie une chaîne vide. Si vous envoyez une chaîne
vide, chat enverra aussi le caractère retour chariot. Cette
séquence peut être entourée d’apostrophes simples ou doubles.
\b représente un backspace.
\c Supprime le caractère retour chariot à la fin de la chaîne
envoyée. C’est la seule méthode pour envoyer une chaîne sans
retour chariot final. Il doit être placé à la fin de la chaîne
d’envoi. Par exemple, la séquence « hello\c » enverra simplement
les caractères h, e, l, l, o. Ce n’est pas valide dans une
chaîne attendue.
\d Délai d’une seconde. Le programme utilise sleep(1), qui attendra
une seconde. Ce n’est pas valide dans une chaîne attendue.
\K Insère une interruption (BREAK). Ce n’est pas valide dans une
chaîne attendue.
\n Envoie un saut de ligne.
\N Envoie un caractère nul. La même séquence peut être représentée
par \0. Ce n’est pas valide dans une chaîne attendue.
\p Marque une pause d’1/10 de seconde. Ce n’est pas valide dans
une chaîne attendue.
\q Empêche l’écriture de la chaîne dans le fichier SYSLOG. La
chaîne ?????? est écrite à sa place. Ce n’est pas valide dans
une chaîne attendue.
\r Envoie ou attend un retour chariot.
\s Représente un espace dans la chaîne. Cela peut être utilisé pour
éviter de mettre la chaîne entre guillemets. Les séquences « HI
TIM » et « HI\sTIM » sont équivalentes.
\t Envoie ou attend un caractère de tabulation.
\T Envoie la chaîne passée en paramètre par l’option -T. Ce n’est
pas valide dans une chaîne attendue.
\U Envoie la chaîne passée en paramètre par l’option -U. Ce n’est
pas valide dans une chaîne attendue.
\\ Envoie ou attend un caractère "backslash".
\ddd Envoie le caractère ASCII dont le code en octal est ddd.
Certains caractères ne sont pas valides dans une chaîne
attendue.
^C Substitue à la séquence le caractère de contrôle représenté par
C. Par exemple, le caractère DC1 (17) est représenté par ^Q.
Certains caractères ne sont pas valides dans une chaîne
attendue.
VARIABLES Dâ€â€™ENVIRONNEMENT
Les variables d’environnement sont disponibles dans les scripts chat si
l’option -E a été spécifiée sur la ligne de commande. Le métacaractère
$ est utilisé pour introduire le nom de la variable d’environnement Ã
substituer. Si la substitution échoue parce que la variable n’est pas
définie, rien ne remplacera la variable.
VALEURS DE RETOUR
Le programme chat se terminera en renvoyant l’un de ces codes :
0 Terminaison normale du programme. Cela indique que le script
s’est exécuté sans erreur jusqu’à la fin.
1 L’un au moins des paramètres est invalide, ou bien une chaîne
attendue est trop longue pour les tampons internes. Cela indique
que le programme ne s’est pas exécuté correctement.
2 Un erreur est survenue durant l’exécution du programme. Cela
peut être dû à une erreur de lecture ou d’écriture, ou à la
réception par CHAT d’un signal comme SIGINT.
3 Une expiration de délai (timeout) a eu lieu pendant l’attente
d’une chaîne sans chaîne « -sousenvoyée ». Cela peut vouloir
dire que votre script n’est pas adapté aux conditions, ou qu’un
événement inattendu a eu lieu, et que la chaîne attendue n’a pas
été reçue.
4 La première chaîne marquée par une condition ABORT a été
détectée.
5 La deuxième chaîne marquée par une condition ABORT a été
détectée.
6 La troisième chaîne marquée par une condition ABORT a été
détectée.
7 La quatrième chaîne marquée par une condition ABORT a été
détectée.
... Toutes les autres valeurs de retour indiquent aussi une
condition ABORT.
Grâce à la valeur de retour, il est possible de déterminer quel
événement a terminé le script. Il est possible de décider si la chaîne
« BUSY » a été reçue par le modem, ou si c’est « NO DIAL TONE ». Dans
le premier cas, il est possible de refaire une tentative plus tard,
alors que cela a peu de chance de marcher (sans intervention manuelle)
dans le second.
VOIR AUSSI
Des informations supplémentaires sur les scripts chat peuvent être
trouvées dans la documentation UUCP. Le script chat a été développé Ã
partir d’idées proposées dans les scripts utilisés par le programme
uucico.
uucico(1), uucp(1)
COPYRIGHT
Le programme chat est dans le domaine public. Il n’est PAS sous la
Licence Publique GNU (GPL). S’il se casse, vous pouvez garder les
morceaux.
TRADUCTION
Guillaume Allègre <Guillaume.Allegre@imag.fr>, août 2000
AVERTISSEMENT SUR LA TRADUCTION
Il est possible que cette traduction soit imparfaite ou périmée. En cas
de doute, veuillez vous reporter au document original en langue
anglaise fourni avec le programme.