CHAT(8)

الاسم
تشات - نص حوار آلي مع مودم

موجز
chat [ خيارات ] نص

الوصف

يُعرّف برنامج chat تبادلاً حوارياً بين الحاسوب والمودم. غرضه الرئيسي هو إنشاء الاتصال بين برنامج خفي لبروتوكول نقطة إلى نقطة (pppd) وعملية pppd البعيدة.

الخيارات

-f <ملف تشات>
    يُقرأ نص التشات من ملف التشات. استخدام هذا الخيار حصري مع معاملات نص التشات. يجب أن يمتلك المستخدم صلاحية قراءة للملف. يُسمح بأسطر متعددة في الملف. يجب استخدام مسافة أو حرف جدولة أفقي لفصل السلاسل.

-t <مهلة>
    اضبط المهلة لاستلام السلسلة المتوقعة. إذا لم تُستلم السلسلة ضمن الحد الزمني، فلن تُرسل سلسلة الرد. قد يُرسل رد بديل أو سيفشل النص البرمجي إذا لم توجد سلسلة رد بديلة. سيؤدي النص البرمجي الفاشل إلى إنهاء برنامج chat برمز خطأ غير صفري. يمكنك أيضًا استخدام سلسلة TIMEOUT لتحديد المهلة.

-r <ملف تقرير>
    يُضبط ملف إخراج سلاسل التقرير. إذا استُخدمت الكلمة المفتاحية REPORT، تُكتب السلاسل الناتجة إلى هذا الملف. إذا لم يُستخدم هذا الخيار وما زالت كلمات REPORT المفتاحية مستخدمة، يُستخدم ملف stderr لسلاسل التقرير.

-e  يُبدأ بخيار الصدى مُفعّلاً. يمكن أيضًا تفعيل أو تعطيل الصدى في نقاط محددة في نص التشات باستخدام الكلمة المفتاحية ECHO. عند تفعيل الصدى، يُعاد صدى كل المخرجات من المودم إلى stderr.

-E  يُفعّل استبدال متغيرات البيئة داخل نصوص التشات باستخدام الصيغة القياسية $xxx.

-v  يُطلب تنفيذ نص chat في وضع مفصل. سيسجل برنامج chat بعدها حالة تنفيذ نص التشات بالإضافة إلى كل النصوص المستلمة من المودم وسلاسل المخرجات المرسلة إلى المودم. المبدئي هو التسجيل عبر SYSLOG؛ يمكن تغيير طريقة التسجيل بالعلامتين -S و -s.

-V  يُطلب تنفيذ نص chat في وضع مفصل stderr. سيسجل برنامج chat بعدها كل النصوص المستلمة من المودم وسلاسل المخرجات المرسلة إلى المودم إلى جهاز stderr. هذا الجهاز عادةً ما يكون وحدة التحكم المحلية في المحطة التي تشغل برنامج chat أو pppd.

-s  يُستخدم stderr. ستُرسل كل رسائل السجل من '-v' وكل رسائل الخطأ إلى stderr.

-S  لا يُستخدم SYSLOG. مبدئيًا، تُرسل رسائل الخطأ إلى SYSLOG. استخدام -S سيمنع إرسال رسائل السجل من '-v' ورسائل الخطأ إلى SYSLOG.

-T <رقم هاتف>
    يُمرر سلسلة عشوائية، عادةً رقم هاتف، ستُستبدل بالحرف الفوقي للاستبدال \T في سلسلة إرسال.

-U <رقم الهاتف 2>
    يُمرر سلسلة ثانية، عادة رقم هاتف، تُستبدل بالحرف الوصفي \U في سلسلة الإرسال. هذا مفيد عند الاتصال بمهايئ طرفي ISDN يتطلب رقمين.

نص برمجي
    إذا لم يُحدد النص البرمجي في ملف مع الخيار -f، فإن النص البرمجي يُضمن كوسائط لبرنامج chat.

النص البرمجي للمحادثة

يُعرّف النص البرمجي لـ chat الاتصالات.

يتكون النص البرمجي من زوج واحد أو أكثر من سلاسل "توقع-إرسال"، مفصولة بمسافات، مع زوج سلسلة "توقع فرعي-إرسال فرعي" اختياري، مفصول بشرطة كما في المثال التالي:

    ogin:-BREAK-ogin: ppp ssword: hello2u2

يشير هذا السطر إلى أن برنامج chat يجب أن يتوقع السلسلة "ogin:". إذا فشل في استلام موجه تسجيل الدخول ضمن الفاصل الزمني المخصص، فإنه يُرسل تسلسل قطع إلى البعيد ثم يتوقع السلسلة "ogin:". إذا استُلم أول "ogin:"، فلا يُنشأ تسلسل القطع.

بمجرد استلام موجه تسجيل الدخول، يُرسل برنامج chat السلسلة ppp ثم يتوقع الموجه "ssword:". عندما يستلم موجه كلمة المرور، يُرسل كلمة المرور hello2u2.

يُرسل حرف إرجاع العربة عادة بعد سلسلة الرد. لا يُتوقع في سلسلة "التوقع" إلا إذا طُلب تحديدًا باستخدام تسلسل الأحرف \r.

يجب أن يحتوي تسلسل التوقع فقط على ما هو ضروري لتحديد السلسلة. نظرًا لأنه يُخزن عادة في ملف قرص، فلا ينبغي أن يحتوي على معلومات متغيرة. من غير المقبول عمومًا البحث عن سلاسل زمنية أو سلاسل تعريف شبكة أو أجزاء بيانات متغيرة أخرى كسلسلة توقع.

للمساعدة في تصحيح الأحرف التي قد تُفسد أثناء التسلسل الأولي، ابحث عن السلسلة "ogin:" بدلاً من "login:". من الممكن أن يُستلم الحرف الأول "l" بشكل خاطئ وقد لا تجد السلسلة أبدًا حتى لو أرسلها النظام. لهذا السبب، تبحث النصوص البرمجية عن "ogin:" بدلاً من "login:" و"ssword:" بدلاً من "password:".

قد يبدو نص برمجي بسيط جدًا كالتالي:

    ogin: ppp ssword: hello2u2

بمعنى آخر، توقع ....ogin:، أرسل ppp، توقع ...ssword:، أرسل hello2u2.

في الممارسة الفعلية، النصوص البرمجية البسيطة نادرة. على الأقل، يجب تضمين تسلسلات توقع فرعية في حال عدم استلام السلسلة الأصلية. على سبيل المثال، اعتبر النص البرمجي التالي:

    ogin:--ogin: ppp ssword: hello2u2

سيكون هذا نصًا برمجيًا أفضل من البسيط المستخدم سابقًا. سيبحث عن نفس الموجه login:، ولكن إذا لم يُستلم واحد، يُرسل تسلسل إرجاع واحد ثم يبحث عن login: مرة أخرى. إذا شوش ضوضاء الخط أول موجه تسجيل دخول، فإن إرسال السطر الفارغ سيُولد عادة موجه تسجيل دخول مرة أخرى.

تعليقات
يمكن تضمين التعليقات في النص البرمجي للمحادثة. التعليق هو سطر يبدأ بالحرف # (شباك) في العمود 1. تُتجاهل أسطر التعليق هذه ببساطة بواسطة برنامج المحادثة. إذا كان من المتوقع أن يكون الحرف '#' هو أول حرف في تسلسل التوقع، فيجب وضع سلسلة التوقع بين علامتي اقتباس. إذا أردت الانتظار لموجه يبدأ بالحرف # (شباك)، فستحتاج إلى كتابة شيء مثل هذا:

    # الآن انتظر المطالبة وأرسل سلسلة تسجيل الخروج
    '# ' تسجيل_الخروج

إرسال البيانات من ملف
إذا بدأت السلسلة المراد إرسالها بعلامة @، فإن باقي السلسلة يعتبر اسم ملف يُقرأ للحصول على السلسلة المراد إرسالها. إذا كان آخر حرف في البيانات المقروءة هو سطر جديد، يُحذف. يمكن أن يكون الملف أنبوبًا مسمى (أو fifo) بدلاً من ملف عادي. يوفر هذا طريقة لـ chat للتواصل مع برنامج آخر، على سبيل المثال، برنامج يطلب من المستخدم إدخال كلمة مرور ويتلقاها.

سلاسل الإجهاض
تقرير العديد من أجهزة المودم عن حالة الاتصال كسلسلة. قد تكون هذه السلاسل CONNECTED أو NO CARRIER أو BUSY. غالبًا ما يكون من المرغوب إنهاء النص البرمجي إذا فشل المودم في الاتصال بالجهاز البعيد. الصعوبة هي أن النص البرمجي لا يعرف بالضبط أي سلسلة مودم قد يتلقاها. في محاولة واحدة، قد يتلقى BUSY بينما في المرة التالية قد يتلقى NO CARRIER.

يمكن تحديد سلاسل "الإجهاض" هذه في النص البرمجي باستخدام تسلسل ABORT. يُكتب في النص البرمجي كما في المثال التالي:

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

هذا التسلسل لا يتوقع شيئًا؛ ثم يرسل السلسلة ATZ. الرد المتوقع على ذلك هو السلسلة OK. عندما يتلقى OK، يرسل السلسلة ATDT5551212 لطلب الهاتف. السلسلة المتوقعة هي CONNECT. إذا تم استلام السلسلة CONNECT، يُنفذ باقي النص البرمجي. ومع ذلك، إذا وجد المودم هاتفًا مشغولًا، فسيرسل السلسلة BUSY. سيؤدي هذا إلى تطابق السلسلة مع تسلسل أحرف الإجهاض. سيفشل النص البرمجي بعد ذلك لأنه وجد تطابقًا مع سلسلة الإجهاض. إذا تلقى السلسلة NO CARRIER، فسيجهز لنفس السبب. قد يتم استلام أي من السلسلتين. أي من السلسلتين ستنهي النص البرمجي chat.

سلاسل CLR_ABORT
يسمح هذا التسلسل بمسح سلاسل ABORT المحددة مسبقًا. تُحفظ سلاسل ABORT في مصفوفة بحجم محدد مسبقًا (في وقت الترجمة)؛ CLR_ABORT يستعيد المساحة للإدخالات الممسوحة بحيث يمكن للسلاسل الجديدة استخدام تلك المساحة.

سلاسل SAY
توجيه SAY يسمح للنص البرمجي بإرسال سلاسل إلى المستخدم في الطرفية عبر الخطأ المعياري. إذا كان chat يُشغل بواسطة pppd، وكان pppd يعمل كخفي (منفصل عن طرفيته المسيطرة)، فسيتم إعادة توجيه الخطأ المعياري عادةً إلى الملف /etc/ppp/connect-errors.

يجب وضع سلاسل SAY بين علامتي اقتباس مفردة أو مزدوجة. إذا كان إرجاع العربة وتغذية السطر مطلوبين في السلسلة المراد إخراجها، فيجب إضافتهما صراحةً إلى السلسلة.

يمكن استخدام سلاسل SAY لإعطاء رسائل تقدم في أقسام النص البرمجي حيث تريد 'ECHO OFF' ولكن مع إبقاء المستخدم على علم بما يحدث. مثال على ذلك:

    ABORT BUSY
    ECHO OFF
    SAY "جارٍ الاتصال بمزود الخدمة...\n"
    ” ATDT5551212
    TIMEOUT 120
    قل "الانتظار لمدة تصل إلى دقيقتين للاتصال ..."
    اتصل ”
    قل "تم الاتصال، جارٍ تسجيل الدخول الآن ...
    تسجيل الدخول: حساب
    كلمة السر: مرور
    $ \c
    قل "تم تسجيل الدخول بنجاح ... إلخ ...

هذا التسلسل سيعرض سلاسل SAY فقط للمستخدم وستبقى جميع تفاصيل النص البرمجي مخفية. على سبيل المثال، إذا عمل النص البرمجي أعلاه، سيرى المستخدم:

    جارٍ الاتصال بمزود الخدمة...
    الانتظار لمدة تصل إلى دقيقتين للاتصال ... تم الاتصال، جارٍ تسجيل الدخول الآن ...
    تم تسجيل الدخول بنجاح ...

سلاسل التقرير
سلسلة التقرير مشابهة لسلسلة الإحباط. الفرق هو أن السلاسل، وجميع الأحرف حتى الحرف التحكمي التالي مثل إرجاع العربة، تُكتب إلى ملف التقرير.

قد تُستخدم سلاسل التقرير لعزل معدل الإرسال لسلسلة اتصال المودم وإرجاع القيمة إلى مستخدم الدردشة. يحدث تحليل منطق سلسلة التقرير بالتزامن مع معالجة السلاسل الأخرى مثل البحث عن السلسلة المتوقعة. استخدام نفس السلسلة لتسلسل تقرير وإحباط ربما ليس مفيدًا جدًا، ومع ذلك، فهو ممكن.

سلاسل التقرير لا تغير رمز الإكمال للبرنامج.

يمكن تحديد سلاسل "التقرير" هذه في النص البرمجي باستخدام تسلسل REPORT. يُكتب في النص البرمجي كما في المثال التالي:

    تقرير اتصال إحباط مشغول ” ATDT5551212 اتصال ” تسجيل الدخول: حساب

هذا التسلسل لن يتوقع شيئًا؛ ثم سيرسل السلسلة ATDT5551212 لطلب الهاتف. السلسلة المتوقعة هي CONNECT. إذا تم استلام السلسلة CONNECT، يُنفذ باقي النص البرمجي. بالإضافة إلى ذلك، سيكتب البرنامج إلى ملف التوقع السلسلة "CONNECT" بالإضافة إلى أي أحرف تتبعها مثل معدل الاتصال.

سلاسل مسح التقرير
هذا التسلسل يسمح بمسح سلاسل REPORT المحددة مسبقًا. تُحفظ سلاسل REPORT في مصفوفة بحجم محدد مسبقًا (في وقت التجميع)؛ CLR_REPORT سيستعيد المساحة للإدخالات الممسوحة بحيث يمكن للسلاسل الجديدة استخدام تلك المساحة.

ECHO
تتحكم خيارات الصدى فيما إذا كان الإخراج من المودم يُصدى إلى stderr. يمكن ضبط هذا الخيار باستخدام الخيار -e، ولكن يمكن أيضًا التحكم به بواسطة الكلمة المفتاحية ECHO. الزوج "توقع-إرسال" ECHO ON يُفعّل الصدى، و ECHO OFF يُعطّله. باستخدام هذه الكلمة المفتاحية يمكنك تحديد أي أجزاء المحادثة يجب أن تكون مرئية. على سبيل المثال، مع النص البرمجي التالي:

    ABORT 'BUSY'
    ABORT 'NO CARRIER'
    ” ATZ
    OK\r\n ATD1234567
    \r\n \c
    ECHO ON
    CONNECT \c
    تسجيل الدخول: حساب

جميع المخرجات الناتجة عن تكوين المودم والاتصال غير مرئية، ولكن بدءًا من رسالة CONNECT (أو BUSY)، سيُصدى كل شيء.

HANGUP
تتحكم خيارات HANGUP فيما إذا كان قطع اتصال المودم يجب اعتباره خطأ أم لا. هذا الخيار مفيد في النصوص البرمجية لأنظمة الاتصال التي ستقطع الاتصال وتتصل بنظامك مرة أخرى. يمكن أن تكون خيارات HANGUP ON أو OFF.
عند ضبط HANGUP على OFF وقطع المودم الاتصال (مثلًا، بعد المرحلة الأولى من تسجيل الدخول إلى نظام رد الاتصال)، سيواصل 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
    أجهض «لا يوجد حامل»
    ogin:--BREAK--ogin: real_account
    إلخ ...

المهلة
قيمة المهلة الأولية هي 45 ثانية. يمكن تغيير هذا باستخدام المعامل -t. يمكنك أيضًا تحديد "TIMEOUT 0".

لتغيير قيمة المهلة للسلسلة المتوقعة التالية، يمكن استخدام المثال التالي:

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

سيغير هذا المهلة إلى 10 ثوانٍ عندما يتوقع الموجه login:. ثم تُغير المهلة إلى 5 ثوانٍ عند البحث عن الموجه password.

المهلة، بمجرد تغييرها، تظل سارية المفعول حتى تُغير مرة أخرى.

إرسال EOT
سلسلة الرد الخاصة EOT تشير إلى أن برنامج chat يجب أن يرسل حرف EOT إلى الجهاز البعيد. هذا عادةً ما يكون تسلسل حرف نهاية الملف. لا يُرسل حرف إرجاع بعد EOT. يمكن تضمين تسلسل EOT في سلسلة الإرسال باستخدام التسلسل ^D.

توليد BREAK
سلسلة الرد الخاصة BREAK ستتسبب في إرسال حالة قطع. القطع هو إشارة خاصة على المرسل. المعالجة الطبيعية على المستقبل هي تغيير معدل الإرسال. يمكن استخدامه للتنقل عبر معدلات الإرسال المتاحة على الجهاز البعيد حتى تتمكن من استقبال موجه تسجيل دخول صالح. يمكن تضمين تسلسل القطع في سلسلة الإرسال باستخدام التسلسل \K.

تسلسلات الهروب
قد تحتوي سلاسل التوقع والرد على تسلسلات هروب. جميع التسلسلات قانونية في سلسلة الرد. العديد منها قانوني في التوقع. تلك غير الصالحة في تسلسل التوقع يُشار إليها بذلك.

”   يتوقع أو يرسل سلسلة فارغة. إذا أرسلت سلسلة فارغة، فسيظل يرسل حرف الإرجاع. قد يكون هذا التسلسل إما زوجًا من علامات الاقتباس المفردة أو المزدوجة.

\b  يمثل حرف مسح للخلف.

\c  يكبت السطر الجديد في نهاية سلسلة الرد. هذه هي الطريقة الوحيدة لإرسال سلسلة بدون حرف إرجاع زائد. يجب أن يكون في نهاية سلسلة الإرسال. على سبيل المثال، التسلسل hello\c سيرسل ببساطة الأحرف h, e, l, l, o. (غير صالح في التوقع.)

\d  تأخير لمدة ثانية واحدة. يستخدم البرنامج sleep(1) الذي سيؤخر لمدة أقصاها ثانية واحدة. (غير صالح في التوقع.)

\K  إدراج BREAK (غير صالح في التوقع.)

\n  إرسال حرف سطر جديد أو تغذية سطر.

\N  إرسال حرف فارغ. قد يُعبر عن نفس التسلسل بواسطة \0. (غير صالح في التوقع.)

\p  توقف لجزء من الثانية. التأخير هو 1/10 من الثانية. (غير صالح في expect.)

\q  قم بكتم كتابة السلسلة إلى ملف SYSLOG. تُكتب السلسلة ?????? إلى السجل مكانها. (غير صالح في expect.)

\r  أرسل أو توقع إرجاع عربة.

\s  يمثل حرف مسافة في السلسلة. يمكن استخدامه عندما لا يكون من المرغوب فيه وضع علامات اقتباس حول السلاسل التي تحتوي على مسافات. التسلسل 'HI TIM' و HI\sTIM متماثلان.

\t  أرسل أو توقع حرف جدولة.

\T  أرسل سلسلة رقم الهاتف كما هو محدد مع الخيار -T (غير صالح في expect.)

\U  أرسل سلسلة رقم الهاتف 2 كما هو محدد مع الخيار -U (غير صالح في expect.)

\\  أرسل أو توقع حرف شرطة مائلة عكسية.

\ddd
    قم بدمج الأرقام الثمانية (ddd) في حرف ASCII واحد وأرسل ذلك الحرف. (بعض الأحرف غير صالحة في expect.)

^C  استبدل التسلسل بحرف التحكم الممثل بـ C. على سبيل المثال، يظهر الحرف DC1 (17) كـ ^Q. (بعض الأحرف غير صالحة في expect.)

متغيرات البيئة
متغيرات البيئة متاحة داخل نصوص chat، إذا تم تحديد الخيار -E في سطر الأوامر. يُستخدم الحرف الفوقي $ لتقديم اسم متغير البيئة المراد استبداله. إذا فشل الاستبدال، لأن متغير البيئة المطلوب غير معين، فلا يُستبدل شيء للمتغير.

رموز الإنهاء
سينهي برنامج chat مع رموز الإكمال التالية.

0   الإنهاء الطبيعي للبرنامج. يشير هذا إلى أن النص البرمجي نُفذ بدون خطأ حتى الاستنتاج الطبيعي.

1   واحد أو أكثر من المعاملات غير صالح أو سلسلة expect كبيرة جدًا للمخازن المؤقتة الداخلية. يشير هذا إلى أن البرنامج لم يُنفذ بشكل صحيح.

2   حدث خطأ أثناء تنفيذ البرنامج. قد يكون هذا بسبب فشل عملية قراءة أو كتابة لسبب ما أو استقبال chat لإشارة مثل SIGINT.

3   حدث حدث انتهاء المهلة عندما كانت هناك سلسلة توقع بدون وجود سلسلة "-إرسال فرعي". قد يعني هذا أنك لم تبرمج النص البرمجي بشكل صحيح للشرط أو أن حدثًا غير متوقع قد وقع ولم يتم العثور على السلسلة المتوقعة.

4   حدثت السلسلة الأولى المميزة كشرط إحباط.

5   حدثت السلسلة الثانية المميزة كشرط إحباط.

6   حدثت السلسلة الثالثة المميزة كشرط إحباط.

7   حدثت السلسلة الرابعة المميزة كشرط إحباط.

... رموز الإنهاء الأخرى هي أيضًا سلاسل مميزة كشرط إحباط.

باستخدام رمز الإنهاء، من الممكن تحديد أي حدث أنهى النص البرمجي. من الممكن تحديد ما إذا كانت السلسلة "BUSY" قد استُلمت من المودم بدلاً من "NO DIAL TONE". بينما قد يُعاد محاولة الحدث الأول، فإن الثاني سيكون لديه على الأرجح فرصة ضئيلة للنجاح أثناء إعادة المحاولة.

انظر أيضًا
يمكن العثور على معلومات إضافية حول نصوص chat البرمجية في توثيق UUCP. تم أخذ نص chat البرمجي من الأفكار المقترحة بواسطة النصوص البرمجية المستخدمة في برنامج uucico.

uucico(1), uucp(1)

حقوق النسخ
برنامج chat هو في المجال العام. هذا ليس ترخيص GNU العام. إذا تعطل، فستحتفظ بالقطعتين.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.