CHAT(8) System Manager's Manual CHAT(8)

chat - اسکریپت خودکار تبادل پیام برای مودم و خطوط ارتباطی

chat [ options ] script

برنامه chat یک تبادل محاوره‌ای میان رایانه و مودم را تعریف می‌کند. هدف اصلی آن برقراری اتصال میان دیمن پروتکل نقطه به نقطه (pppd) و فرایند pppd سمت دوردست است.

اسکریپت چت را از فایل <chat file> می‌خواند. استفاده از این گزینه مانعه‌الجمع با پارامترهای مستقیم اسکریپت چت در خط فرمان است. کاربر باید دسترسی خواندن به فایل را داشته باشد. وجود چندین خط در فایل مجاز است. برای جداسازی رشته‌ها باید از نویسه‌های فاصله یا تب افقی استفاده شود.
-t <timeout>
مهلت زمانی (برحسب ثانیه) را برای دریافت رشته مورد انتظار تعیین می‌کند. اگر رشته در این محدوده زمانی دریافت نشود، رشته پاسخ ارسال نخواهد شد. در صورت وجود پاسخ جایگزین، آن پاسخ ارسال می‌شود و در غیر این صورت اسکریپت با شکست مواجه خواهد شد. شکست اسکریپت موجب می‌شود برنامه chat با یک کد خطای غیرصفر خاتمه یابد.
-r <report file>
فایلی را برای خروجی رشته‌های گزارش مشخص می‌کند. اگر از کلمه کلیدی REPORT استفاده کنید، رشته‌های حاصل در این فایل نوشته می‌شوند. اگر از این گزینه استفاده نشود ولی همچنان کلمات کلیدی REPORT به کار روند، از خروجی خطای استاندارد (stderr) برای رشته‌های گزارش استفاده می‌شود.
با فعال بودن گزینه پژواک (echo) آغاز به کار می‌کند. همچنین می‌توان پژواک را در نقاط مشخصی از اسکریپت چت با استفاده از کلمه کلیدی ECHO روشن یا خاموش کرد. هنگامی که پژواک فعال باشد، تمام خروجی‌های دریافتی از مودم در stderr پژواک (تکرار) می‌شوند.
جایگزینی متغیرهای محیطی را در اسکریپت‌های چت با استفاده از نحو استاندارد $xxx فعال می‌کند.
درخواست می‌کند که اسکریپت chat در حالت پرگو (verbose) اجرا شود. در این حالت، برنامه chat وضعیت اجرای اسکریپت چت و همچنین تمام متن‌های دریافتی از مودم و رشته‌های خروجی ارسال‌شده به مودم را ثبت می‌کند. حالت پیش‌فرض، ثبت گزارش‌ها از طریق سامانه SYSLOG است؛ روش ثبت گزارش را می‌توان با سوییچ‌های -S و -s تغییر داد.
درخواست می‌کند که اسکریپت chat در حالت پرگو روی خروجی خطای استاندارد (stderr) اجرا شود. در این حالت، برنامه chat تمام متن‌های دریافتی از مودم و رشته‌های خروجی ارسال‌شده به مودم را در دستگاه stderr ثبت می‌کند. این دستگاه معمولاً کنسول محلی در سامانه‌ای است که برنامه chat یا pppd را اجرا می‌کند.
استفاده از stderr. تمام پیام‌های لاگ ناشی از '-v' و تمام پیام‌های خطا به stderr ارسال خواهند شد.
عدم استفاده از SYSLOG. به طور پیش‌فرض، پیام‌های خطا به SYSLOG ارسال می‌شوند. استفاده از -S از ارسال هر دو گروه پیام‌های گزارش ناشی از '-v' و پیام‌های خطا به SYSLOG جلوگیری می‌کند.
-T <phone number>
یک رشته دلخواه (معمولاً یک شماره تلفن) را ارسال می‌کند که در رشته ارسال جایگزین فراکاراکتر \T خواهد شد.
-U <phone number 2>
یک رشته دوم (معمولاً یک شماره تلفن دیگر) را ارسال می‌کند که در رشته ارسال جایگزین فراکاراکتر \U خواهد شد. این گزینه هنگام شماره‌گیری یک آداپتور پایانه ISDN که نیازمند دو شماره است مفید است.
اگر اسکریپت در یک فایل با گزینه -f مشخص نشده باشد، اسکریپت به عنوان پارامترهای برنامه chat در خط فرمان گنجانده می‌شود.

اسکریپت chat ارتباطات را تعریف می‌کند.

یک اسکریپت شامل یک یا چند جفت رشته «انتظار-ارسال» (expect-send) است که با فاصله از یکدیگر جدا شده‌اند، به همراه یک جفت اختیاری «انتظار فرعی-ارسال فرعی» (subexpect-subsend) که با خط تیره از هم جدا می‌شوند؛ مانند مثال زیر:

ogin:-BREAK-ogin: ppp ssword: hello2u2

این خط نشان می‌دهد که برنامه chat باید منتظر رشته "ogin:" باشد. اگر در بازه زمانی تعیین‌شده اعلان ورود (login prompt) را دریافت نکند، یک توالی سیگنال شکست (break sequence) به سیستم راه دور ارسال کرده و سپس دوباره منتظر رشته "ogin:" می‌ماند. اگر اولین "ogin:" با موفقیت دریافت شود، توالی break تولید نخواهد شد.

به محض دریافت اعلان ورود، برنامه chat رشته ppp را ارسال کرده و سپس منتظر اعلان "ssword:" می‌ماند. پس از دریافت اعلان گذرواژه، گذرواژه hello2u2 را ارسال می‌کند.

معمولاً پس از رشته پاسخ، یک نویسه بازگشت به ابتدای سطر (carriage return یا \r) ارسال می‌شود. در رشته «انتظار» (expect) منتظر این نویسه نخواهد ماند مگر اینکه صراحتاً با استفاده از توالی نویسه \r درخواست شده باشد.

توالی انتظار فقط باید حاوی مقداری باشد که برای شناسایی رشته کافی است. از آنجا که این اسکریپت معمولاً در فایلی روی دیسک ذخیره می‌شود، نباید شامل اطلاعات متغیر باشد. به عنوان یک قاعده کلی، جستجوی رشته‌های زمانی، شناسه‌های شبکه یا سایر داده‌های متغیر به عنوان رشته انتظار مناسب نیست.

برای کمک به تصحیح نویسه‌هایی که ممکن است در طول توالی اولیه مخدوش شوند، بهتر است به جای "login:" به دنبال رشته "ogin:" بگردید. این احتمال وجود دارد که نویسه ابتدایی "l" به دلیل اختلال خط با خطا دریافت شود و شما هرگز رشته را پیدا نکنید، حتی با وجود اینکه توسط سیستم ارسال شده باشد. به همین دلیل، اسکریپت‌ها به جای "login:" به دنبال "ogin:" و به جای "password:" به دنبال "ssword:" می‌گردند.

یک اسکریپت بسیار ساده ممکن است به این صورت باشد:

ogin: ppp ssword: hello2u2

به عبارت دیگر: منتظر ....ogin: بمان، ppp را ارسال کن، منتظر ...ssword: بمان، hello2u2 را ارسال کن.

در عمل، اسکریپت‌های ساده به ندرت به کار می‌روند. حداقل کاری که باید انجام دهید این است که توالی‌های انتظار فرعی را برای حالتی که رشته اصلی دریافت نشود بگنجانید. برای نمونه، اسکریپت زیر را در نظر بگیرید:

ogin:--ogin: ppp ssword: hello2u2

این اسکریپت به مراتب بهتر از اسکریپت ساده قبلی است. این اسکریپت به دنبال همان اعلان login: می‌گردد، اما اگر اعلانی دریافت نشد، یک توالی بازگشت سطر (Enter خالی) ارسال کرده و دوباره به دنبال login: می‌گردد. اگر نویز خط باعث پوشانده شدن یا مخدوش شدن اولین اعلان ورود شده باشد، ارسال یک خط خالی معمولاً موجب تولید مجدد اعلان ورود خواهد شد.

توضیحات (کامنت‌ها) را می‌توان درون اسکریپت چت جاسازی کرد. توضیح خطی است که با نویسه # (مربع/هشتگ) در ستون اول آغاز می‌شود. این خطوط توضیحی به سادگی توسط برنامه chat نادیده گرفته می‌شوند. اگر قرار است نویسه '#' به عنوان نخستین نویسه یک توالی انتظار بررسی شود، باید رشته انتظار را درون علامت نقل‌قول قرار دهید. اگر می‌خواهید منتظر اعلانی بمانید که با نویسه # شروع می‌شود، باید چیزی شبیه به این بنویسید:

# Now wait for the prompt and send logout string
´# ' logout

اگر رشته‌ای که قرار است ارسال شود با علامت ات‌ساین (@) شروع شود، باقی‌مانده رشته به عنوان نام فایلی در نظر گرفته می‌شود که رشته ارسالی باید از آن خوانده شود. اگر آخرین نویسه داده‌های خوانده‌شده یک خط جدید (newline) باشد، حذف می‌شود. این فایل می‌تواند به جای یک فایل معمولی، یک لوله نام‌گذاری‌شده (named pipe یا fifo) باشد. این سازوکار راهکاری را برای برنامه chat فراهم می‌کند تا با برنامه‌ای دیگر ارتباط برقرار کند؛ برای نمونه برنامه‌ای که از کاربر ورودی بخواهد و گذرواژه تایپ‌شده را دریافت کند.

بسیاری از مودم‌ها وضعیت تماس را به صورت یک رشته گزارش می‌دهند. این رشته‌ها ممکن است CONNECTED یا NO CARRIER یا BUSY باشند. در صورتی که مودم نتواند به مقصد دوردست متصل شود، اغلب مطلوب است که اجرای اسکریپت خاتمه یابد. مشکل اینجاست که اسکریپت دقیقاً نمی‌داند کدام رشته مودم را دریافت خواهد کرد. در یک تلاش ممکن است BUSY را دریافت کند در حالی که بار دیگر ممکن است NO CARRIER را دریافت نماید.

این رشته‌های «لغو» (abort) را می‌توان در اسکریپت با استفاده از توالی ABORT مشخص کرد. این دستور در اسکریپت مانند مثال زیر نوشته می‌شود:

ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT

این توالی ابتدا منتظر هیچ چیز نمی‌ماند (رشته تهی)، و سپس رشته ATZ را ارسال می‌کند. پاسخ مورد انتظار به این دستور، رشته OK است. پس از دریافت OK، رشته ATDT5551212 برای شماره‌گیری تلفن ارسال می‌شود. رشته مورد انتظار CONNECT است. اگر رشته CONNECT دریافت شود، ادامه اسکریپت اجرا خواهد شد. با این حال، چنانچه خط تلفن اشغال باشد، مودم رشته BUSY را ارسال خواهد کرد. این اتفاق باعث تطابق رشته با توالی نویسه‌های لغو می‌شود. سپس اسکریپت به دلیل یافتن تطابق با رشته لغو، با شکست خاتمه می‌یابد. در صورت دریافت رشته NO CARRIER نیز به همین دلیل اجرای اسکریپت لغو خواهد شد. ممکن است هر یک از این دو رشته دریافت شود، و هر کدام از آن‌ها اجرای اسکریپت chat را متوقف خواهد کرد.

این توالی امکان پاک کردن رشته‌های ABORT از پیش تنظیم‌شده را فراهم می‌کند. رشته‌های ABORT در آرایه‌ای با اندازه از پیش تعیین‌شده (در زمان کامپایل) نگهداری می‌شوند؛ CLR_ABORT فضای اختصاص‌یافته به ورودی‌های پاک‌شده را آزاد می‌کند تا رشته‌های جدید بتوانند از آن فضا استفاده کنند.

دستورالعمل SAY به اسکریپت اجازه می‌دهد رشته‌هایی را از طریق خروجی خطای استاندارد (stderr) به کاربر در پایانه نمایش دهد. اگر chat توسط pppd اجرا شود و pppd در حالت دیمن (جداشده از پایانه کنترلی خود) کار کند، خطای استاندارد معمولاً به فایل /etc/ppp/connect-errors هدایت می‌شود.

رشته‌های SAY باید در علامت‌های نقل‌قول تکی یا دوتایی محصور شوند. اگر در رشته خروجی به بازگشت به ابتدای سطر (carriage return) و سطر جدید (line feed) نیاز است، باید آن‌ها را صراحتاً به رشته خود بیفزایید.

رشته‌های SAY را می‌توان برای نمایش پیام‌های پیشرفت در بخش‌هایی از اسکریپت استفاده کرد که می‌خواهید 'ECHO OFF' باشد اما همچنان مایلید کاربر بداند چه اتفاقی در حال رخ دادن است. یک مثال به شرح زیر است:

ABORT BUSY 
ECHO OFF 
SAY "Dialling your ISP...\n" 
'' ATDT5551212 
TIMEOUT 120
SAY "Waiting up to 2 minutes for connection ... "
CONNECT '' 
SAY "Connected, now logging in ...\n"
ogin: account
ssword: pass
$ \c
SAY "Logged in OK ...\n"
etc ...

این توالی تنها رشته‌های SAY را به کاربر نشان می‌دهد و تمامی جزئیات اسکریپت پنهان خواهند ماند. برای نمونه، اگر اسکریپت فوق به درستی کار کند، کاربر این متن را خواهد دید:

Dialling your ISP...
Waiting up to 2 minutes for connection ... Connected, now logging in ...
Logged in OK ...

یک رشته report مشابه رشته ABORT است. تفاوت در این است که این رشته‌ها و تمامی نویسه‌های پس از آن تا نویسه کنترلی بعدی مانند بازگشت به ابتدای سطر (carriage return)، در فایل گزارش (report file) نوشته می‌شوند.

رشته‌های گزارش می‌توانند برای تفکیک و استخراج نرخ انتقال در رشته اتصال مودم و بازگرداندن مقدار آن به کاربر chat استفاده شوند. تحلیل منطق رشته گزارش هم‌زمان با پردازش سایر رشته‌ها، مانند بررسی رشته انتظار، رخ می‌دهد. استفاده از رشته یکسان هم برای گزارش و هم برای توالی لغو احتمالاً چندان کاربردی نیست، هرچند امکان‌پذیر است.

رشته‌های گزارش کد وضعیت خاتمه برنامه را تغییر نمی‌دهند.

این رشته‌های «گزارش» را می‌توان در اسکریپت با استفاده از توالی REPORT مشخص کرد. این دستور در اسکریپت مانند مثال زیر نوشته می‌شود:

REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account

این توالی ابتدا منتظر هیچ چیز نمی‌ماند (رشته تهی)؛ و سپس رشته ATDT5551212 را برای شماره‌گیری تلفن ارسال می‌کند. رشته مورد انتظار CONNECT است. در صورت دریافت رشته CONNECT ادامه اسکریپت اجرا می‌شود. علاوه بر این، برنامه رشته "CONNECT" را به همراه تمام نویسه‌های بعد از آن مانند نرخ اتصال در فایل گزارش می‌نویسد.

این توالی امکان پاک کردن رشته‌های REPORT تنظیم‌شده قبلی را فراهم می‌کند. رشته‌های REPORT در آرایه‌ای با اندازه از پیش تعیین‌شده (در زمان کامپایل) نگهداری می‌شوند؛ CLR_REPORT فضای اختصاص‌یافته به ورودی‌های پاک‌شده را آزاد می‌کند تا رشته‌های جدید بتوانند از آن فضا استفاده کنند.

گزینه پژواک مشخص می‌کند که آیا خروجی دریافتی از مودم در stderr پژواک داده شود یا خیر. این گزینه را می‌توان با سوییچ -e تنظیم کرد، اما همچنین می‌توان آن را با کلمه کلیدی ECHO کنترل نمود. جفت «انتظار-ارسال» ECHO ON پژواک را فعال می‌کند و ECHO OFF آن را غیرفعال می‌سازد. با این کلمه کلیدی می‌توانید مشخص کنید که کدام بخش‌های گفت‌وگو قابل مشاهده باشند. به عنوان مثال، با اسکریپت زیر:

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

تمام خروجی‌های حاصل از پیکربندی مودم و شماره‌گیری پنهان خواهند بود، اما از پیام CONNECT (یا BUSY) به بعد، همه چیز در خروجی پژواک داده خواهد شد.

گزینه‌های HANGUP مشخص می‌کنند که آیا قطع شدن ارتباط مودم (hangup) باید به عنوان یک خطا تلقی شود یا خیر. این گزینه در اسکریپت‌های مربوط به شماره‌گیری سیستم‌هایی که تماس را قطع کرده و مجدداً با سیستم شما تماس برقرار می‌کنند (callback) مفید است. گزینه‌های HANGUP می‌توانند ON یا OFF باشند.

هنگامی که HANGUP روی OFF تنظیم شود و مودم ارتباط را قطع کند (برای مثال پس از مرحله اول ورود به یک سیستم callback)، برنامه chat به اجرای اسکریپت ادامه خواهد داد (برای مثال، منتظر تماس ورودی و اعلان مرحله دوم ورود می‌ماند). به محض برقراری تماس ورودی، باید از دستورالعمل HANGUP ON برای فعال‌سازی مجدد رفتار معمول سیگنال قطع تماس استفاده کنید. در ادامه یک اسکریپت نمونه (ساده) آمده است:

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 ...

مقدار اولیه مهلت زمانی ۴۵ ثانیه است. این مقدار را می‌توان با استفاده از پارامتر -t تغییر داد.

برای تغییر مقدار مهلت زمانی برای رشته انتظار بعدی، می‌توان از مثال زیر استفاده کرد:

ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2

این دستور، مهلت زمانی را هنگام انتظار برای اعلان login: به ۱۰ ثانیه تغییر می‌دهد. سپس مهلت زمانی هنگام جستجو برای اعلان گذرواژه به ۵ ثانیه تغییر می‌یابد.

مهلت زمانی پس از تغییر، تا زمانی که مجدداً تغییر داده نشود، معتبر و پابرجا باقی می‌ماند.

رشته پاسخ ویژه EOT نشان می‌دهد که برنامه chat باید یک نویسه EOT (پایان انتقال) به سیستم راه دور ارسال کند. این نویسه معمولاً همان توالی نویسه پایان فایل (End-of-file) است. پس از EOT نویسه بازگشت سطر ارسال نمی‌شود. توالی EOT را می‌توان با استفاده از توالی ^D درون رشته ارسال گنجاند.

رشته پاسخ ویژه BREAK باعث ارسال یک وضعیت شکست (break) می‌شود. سیگنال break یک سیگنال ویژه روی فرستنده است. پردازش معمول روی گیرنده، تغییر نرخ انتقال داده است. از این قابلیت می‌توان برای چرخش میان نرخ‌های انتقال موجود در سیستم راه دور استفاده کرد تا زمانی که بتوانید اعلان ورود معتبری را دریافت کنید. توالی break را می‌توان با استفاده از توالی \K درون رشته ارسال قرار داد.

رشته‌های انتظار و پاسخ می‌توانند حاوی توالی‌های گریز (escape sequences) باشند. تمامی این توالی‌ها در رشته پاسخ مجاز هستند. بسیاری از آن‌ها در رشته انتظار نیز مجازند. مواردی که در توالی انتظار معتبر نیستند، مشخص شده‌اند.

''
منتظر یک رشته تهی می‌ماند یا آن را ارسال می‌کند. اگر یک رشته تهی ارسال کنید، همچنان نویسه بازگشت سطر (Enter) ارسال خواهد شد. این توالی می‌تواند یک جفت نویسه آپوستروف یا گیومه باشد.
نشان‌دهنده یک نویسه پس‌بر (backspace) است.
از ارسال نویسه خط جدید در انتهای رشته پاسخ جلوگیری می‌کند. این تنها روش برای ارسال یک رشته بدون نویسه بازگشت سطر پایانی است. این توالی باید در انتهای رشته ارسالی قرار گیرد؛ برای نمونه توالی hello\c صرفاً نویسه‌های h, e, l, l, o را ارسال می‌کند. (در رشته انتظار معتبر نیست.)
ایجاد تاخیر به مدت یک ثانیه. برنامه از تابع sleep(1) استفاده می‌کند که حداکثر تا یک ثانیه تاخیر ایجاد خواهد کرد. (در رشته انتظار معتبر نیست.)
درج سیگنال BREAK. (در رشته انتظار معتبر نیست.)
ارسال نویسه خط جدید (newline یا linefeed).
ارسال یک نویسه پوچ (null character). همین توالی را می‌توان با \0 نیز نمایش داد. (در رشته انتظار معتبر نیست.)
توقف موقت به مدت کسری از ثانیه. این تاخیر برابر با ۱/۱۰ ثانیه است. (در رشته انتظار معتبر نیست.)
جلوگیری از نوشتن رشته در فایل لاگ SYSLOG. به جای آن رشته ?????? در گزارش ثبت می‌شود. (در رشته انتظار معتبر نیست.)
ارسال یا انتظار برای نویسه بازگشت به ابتدای سطر (carriage return).
نشان‌دهنده نویسه فاصله (space) در رشته است. این گزینه زمانی کاربرد دارد که قرار دادن رشته‌های حاوی فاصله درون نقل‌قول مطلوب نباشد. توالی‌های 'HI TIM' و HI\sTIM یکسان هستند.
ارسال یا انتظار برای نویسه تب (tab).
ارسال رشته شماره تلفن به همان صورتی که با گزینه -T مشخص شده است. (در رشته انتظار معتبر نیست.)
ارسال رشته شماره تلفن دوم به همان صورتی که با گزینه -U مشخص شده است. (در رشته انتظار معتبر نیست.)
\\
ارسال یا انتظار برای نویسه بک‌اسلش (\).
تبدیل ارقام هشت‌هشتی (octal digits - ddd) به یک نویسه اسکی (ASCII) واحد و ارسال آن نویسه. (برخی نویسه‌ها در رشته انتظار معتبر نیستند.)
^C
جایگزینی توالی با نویسه کنترلی متناظر با C. برای مثال، نویسه DC1 (17) به صورت ^Q نمایش داده می‌شود. (برخی نویسه‌ها در رشته انتظار معتبر نیستند.)

متغیرهای محیطی درون اسکریپت‌های chat در دسترس هستند، به شرطی که گزینه -E در خط فرمان مشخص شده باشد. فراکاراکتر $ برای معرفی نام متغیر محیطی جهت جایگزینی استفاده می‌شود. اگر جایگزینی به دلیل تنظیم نبودن متغیر محیطی درخواستی با شکست مواجه شود، nothing (رشته خالی) به جای متغیر جایگزین خواهد شد.

برنامه chat با کدهای وضعیت زیر خاتمه می‌یابد:

0
خاتمه عادی برنامه. این کد نشان می‌دهد که اسکریپت بدون خطا تا پایان به صورت عادی اجرا شده است.
1
یک یا چند پارامتر نامعتبر هستند یا یک رشته انتظار برای بافرهای داخلی بیش از حد بزرگ بوده است. این کد نشان می‌دهد که برنامه به درستی اجرا نشده است.
2
خطایی در حین اجرای برنامه رخ داده است. این امر ممکن است ناشی از شکست عملیات خواندن یا نوشتن یا دریافت سیگنالی مانند SIGINT توسط chat باشد.
3
هنگامی که یک رشته expect بدون داشتن رشته "-subsend" وجود داشته، یک رخداد مهلت زمانی (timeout) پیش آمده است. این ممکن است به این معنا باشد که شما اسکریپت را برای آن شرایط به درستی تنظیم نکرده‌اید یا یک رخداد غیرمنتظره پیش آمده و رشته مورد نظر یافت نشده است.
4
اولین رشته‌ای که به عنوان وضعیت ABORT تعیین شده بود رخ داده است.
5
دومین رشته‌ای که به عنوان وضعیت ABORT تعیین شده بود رخ داده است.
6
سومین رشته‌ای که به عنوان وضعیت ABORT تعیین شده بود رخ داده است.
7
چهارمین رشته‌ای که به عنوان وضعیت ABORT تعیین شده بود رخ داده است.
...
سایر کدهای خاتمه نیز نشان‌دهنده رشته‌هایی هستند که به عنوان وضعیت ABORT تعیین شده بودند.

با استفاده از کد خاتمه، می‌توان مشخص کرد که کدام رخداد باعث پایان یافتن اسکریپت شده است. برای نمونه می‌توان تشخیص داد که آیا رشته "BUSY" از مودم دریافت شده یا "NO DIAL TONE". در حالی که رخداد اول را می‌توان دوباره تلاش کرد، رخداد دوم احتمالاً شانس کمی برای موفقیت در تلاش مجدد دارد.

اطلاعات بیشتر درباره اسکریپت‌های chat را می‌توان در مستندات UUCP یافت. ایده اسکریپت chat از ایده‌های ارائه‌شده توسط اسکریپت‌های مورد استفاده در برنامه uucico گرفته شده است.

uucico(1), uucp(1), pppd(8)

برنامه chat توسط کارل فاکس (Karl Fox) نوشته شده است.

برنامه chat در مالکیت عمومی (Public Domain) قرار دارد. این نرم‌افزار تحت مجوز عمومی گنو (GPL) نیست. اگر شکست، هر دو تکه‌اش مال خودتان است!

22 May 1999 Chat Version 1.22