Skip to main content

نتوقع تعليمات لينكس / يونكس القيادة وأمثلة

( OSLinux) قصة حياة مؤسس نظام لينكس (أبريل 2025)

( OSLinux) قصة حياة مؤسس نظام لينكس (أبريل 2025)
Anonim

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

Expectk هو خليط من التوقعات وتك. يتصرف مثل رغبة توقع وتك. ويمكن أيضا أن تستخدم توقع مباشرة في C أو C ++ دون Tcl.

يأتي اسم "Expect" من فكرة تسلسل الإرسال / التوقع الذي تم تعميمه بواسطة uucp و kermit وبرامج تحكم المودم الأخرى. ولكن بخلاف uucp ، فإن Expect يتم تعميمه بحيث يمكن تشغيله كأمر على مستوى المستخدم مع وضع أي برنامج ومهمة في الاعتبار. يمكن توقع التحدث إلى عدة برامج في نفس الوقت.

ما الذي يمكن أن يفعله

على سبيل المثال ، إليك بعض الأشياء التي يمكن أن يؤديها أمر المتوقعة:

  • تسبب جهاز الكمبيوتر الخاص بك للاتصال بك مرة أخرى ، بحيث يمكنك تسجيل الدخول دون دفع ثمن المكالمة.
  • ابدأ اللعبة وإذا لم تظهر التهيئة المثلى ، أعد تشغيلها مرارًا وتكرارًا) حتى يتم ذلك ، ثم تسليم التحكم إليك.
  • تشغيل fsck ، وردا على أسئلتها ، الإجابة "نعم" أو "لا" أو إعطاء التحكم لك ، استناداً إلى معايير محددة سلفا.
  • اتصل بشبكة أخرى واسترجع بريدك تلقائيًا حتى يظهر كما لو كان قد تم إرساله في الأصل إلى نظامك المحلي.
  • احمل متغيرات البيئة ، أو الدليل الحالي ، أو أي نوع من المعلومات عبر rlogin أو telnet أو tip أو su أو chgrp

هناك مجموعة متنوعة من الأسباب التي تجعل shell غير قادر على تنفيذ هذه المهام. كل شيء ممكن مع توقع.

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

استعمال

نتوقع قراءة cmdfile لقائمة الأوامر للتنفيذ. قد يتم استدعاء التوقع ضمنيًا على الأنظمة التي تدعم #! الترميز عن طريق وضع علامة على البرنامج النصي على أنه قابل للتنفيذ وجعل السطر الأول في البرنامج النصي:

#! / usr / local / bin / expect -f

بالطبع ، يجب أن يصف المسار بدقة أين تتوقع الحياة. / usr / local / bin هو مجرد مثال.

تعيّن العلامة -c أمرًا يتم تنفيذه قبل أي نص في النص البرمجي. يجب ذكر الأمر لمنع الانفصال عن طريق القشرة. يمكن استخدام هذا الخيار عدة مرات. قد يتم تنفيذ أوامر متعددة مع واحد -c بفصلها بفواصل منقوطة. يتم تنفيذ الأوامر بالترتيب الذي تظهر به. عند استخدام Expectk ، يتم تحديد هذا الخيار كمطابقة.

تمكّن العلامة -d بعض الإخراج التشخيصي ، الذي يُبلغ في المقام الأول عن الأنشطة الداخلية للأوامر مثل توقع وتفاعل. هذه العلامة لها نفس التأثير مثل "exp_internal 1" في بداية البرنامج النصي Expect ، بالإضافة إلى طباعة إصدار Expect.

تمكّن العلامة -D مصحح أخطاء تفاعلي. يجب أن تتبع قيمة عددية. سيتحكم المصحح قبل الإجراء Tcl التالي إذا كانت القيمة غير صفرية أو إذا تم الضغط على ^ C أو عندها يتم تسجيل نقطة توقف ، أو ظهور أمر مصحح مناسب آخر في البرنامج النصي. عند استخدام Expectk ، يتم تحديد هذا الخيار باسم -التصحيح.

تعيّن العلامة -f ملفًا يمكن من خلاله قراءة الأوامر. العلم نفسه اختياري لأنه مفيد فقط عند استخدام #! تدوين ، بحيث قد يتم توفير الوسائط الأخرى على سطر الأوامر. عند استخدام Expectk ، يتم تحديد هذا الخيار كـ -file.

بشكل افتراضي ، يتم قراءة ملف الأوامر في الذاكرة وتنفيذها بالكامل. من المستحسن أحيانًا قراءة ملفات سطر واحد في كل مرة. من أجل فرض معالجة الملفات التعسفية بهذه الطريقة ، استخدم علامة -b. عند استخدام Expectk ، يتم تحديد هذا الخيار على أنه -buffer.

إذا تم توفير السلسلة "-" كإسم ملف ، تتم قراءة الإدخال القياسي بدلاً من ذلك. استخدم "./-" للقراءة من ملف تمت تسميته بالفعل "-".

السبب -i flag تتوقع المطالبة بشكل تفاعلي للأوامر بدلاً من قراءتها من ملف. يتم إنهاء المطالبة عبر الأمر exit أو على EOF. يفترض العلم -i إذا لم يتم استخدام ملف أمر ولا c -. عند استخدام Expectk ، يتم تحديد هذا الخيار على أنه -interactive.

- يمكن استخدامها لتحديد نهاية الخيارات. يكون هذا مفيدًا إذا كنت ترغب في تمرير وسيطة تشبه الخيار إلى النص البرمجي دون أن يتم تفسيره بواسطة Expect. يمكن وضع هذا بشكل مفيد في #! خط لمنع أي تفسير علمي من قبل توقع. على سبيل المثال ، سيترك التالي الوسيطات الأصلية بما في ذلك اسم البرنامج النصي في المتغير ARGV .

#! / usr / local / bin / expect -

لاحظ أنه يجب مراعاة عادة getopt (3) و execve (2) عند إضافة الوسيطات إلى #! خط.

يتم الحصول على الملف $ exp_library / expect.rc تلقائيًا إذا كان موجودًا ، إلا إذا تم استخدام العلامة -N. (عند استخدام Expectk ، يتم تحديد هذا الخيار كـ -NORC). بعد ذلك مباشرة ، يتم الحصول على الملف ~ / .expect.rc تلقائيًا ، ما لم يتم استخدام العلامة -n. إذا تم تعريف متغير بيئة DOTDIR ، فإنه يتم التعامل معه كدليل و. expect.rc يقرأ من هناك. عند استخدام Expectk ، يتم تحديد هذا الخيار كـ -norc.هذا المصدر يحدث فقط بعد تنفيذ أي أعلام -c.

أسباب -v تتوقع طباعة رقم الإصدار الخاص به والخروج. علم المقابلة في Expectk ، والذي يستخدم أسماء العلم طويلة ، هو -version.

يتم إنشاء args الاختياري في قائمة وتخزينها في المتغير المسمى argv و. يتم تهيئة argc لطول argv.

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

send_user "$ argv0 lrange $ argv 0 2 n"

الأوامر

تتوقع استخدام أداة لغة الأوامر. يوفر Tcl تدفق التحكم (إذا ، ل ، كسر) ، وتقييم التعبير والعديد من الميزات الأخرى مثل تعريف الإجراء recursionand. الأوامر المستخدمة هنا ولكن لم يتم تعريفها (set، if، exec) هي أوامر Tcl. نتوقع يدعم أوامر إضافية. ما لم يتم تحديد خلاف ذلك ، تقوم الأوامر بإرجاع السلسلة الفارغة.

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

close -slave -onexec 0 | 1 -i spawn_id

يغلق الاتصال إلى العملية الحالية. معظم البرامج التفاعلية ستكشف عن EOF على stdin والخروج. وهكذا أغلق تكفي عادة لقتل العملية كذلك. تعلن العلامة -i العملية لإغلاق المقابلة spawn_id المسماة.

كلاهما يتوقع ويتفاعل سوف يكتشف عندما تخرج العملية الحالية ويقترب ضمنا ، ولكن إذا قمت بقتل العملية ، على سبيل المثال "exec kill $ pid" ، تحتاج إلى الاتصال بشكل صريح قريب.

تحدد العلامة -onexec ما إذا كان معرّف التزاوج مغلقًا في أي عمليات جديدة منتجة أو إذا كانت العملية متراكبة. لترك معرف spawn مفتوحًا ، استخدم القيمة 0. تفرض قيمة عدد صحيح غير صفري على البيضة مغلقة في أي عمليات جديدة.

يغلق العلم -Slave الرقيق المرتبط بمعرف تفرخ. عندما يتم إغلاق الاتصال ، يتم إغلاق العبد تلقائيًا إذا كان لا يزال مفتوحًا.

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

debug -now 0 | 1

يتحكم في مصحح الأخطاء Tcl مما يسمح لك بالمرور عبر عبارات وتعيين نقاط التوقف.

بدون وسائط ، يتم إرجاع 1 إذا لم يتم تشغيل المصحح ، وإلا يتم إرجاع 0.

مع وسيطة 1 ، يتم بدء تشغيل المصحح. باستخدام وسيطة 0 ، يتم إيقاف مصحح الأخطاء. إذا كانت مسبوقة 1 مسبوقة بعلامة -now ، يتم تشغيل مصحح الأخطاء مباشرة. وإلا ، يتم بدء تشغيل المصحح مع العبارة Tcl التالي.

لا يقوم الأمر debug بتغيير أي اعتراضات. قارن هذا ببدء "توقع" بعلامة -D.

يفصل أمر قطع الاتصال عملية متشعبة من الجهاز. يستمر في العمل في الخلفية. يتم إعطاء العملية مجموعة العمليات الخاصة بها. يتم إعادة توجيه I / O القياسي إلى / dev / null.

يستخدم الجزء التالي قطع الاتصال لمتابعة تشغيل البرنامج النصي في الخلفية.

إذا كان {شوكة! = 0} قم بإنهاء الفصل. . .

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

send_user "password؟ " expect_user -re "(. *) n" لـ {} 1 {} {if {fork! = 0} {sleep 3600؛ continue} disconnect spawn priv_prog expect Password: send "$ expect_out ( 1 ، سلسلة) r ". . . ىخرج }

إن ميزة استخدام قطع الاتصال على ميزة التشغيل غير المتزامن shell (&) هي أن Expect يمكنه حفظ معلمات المطراف قبل الانفصال ثم تطبيقها فيما بعد على ptys جديدة. مع &،، ليس لدى الفرصة فرصة لقراءة معلمات الجهاز حيث أن الجهاز غير متصل بالفعل مع الوقت الذي يستقبل فيه Expect.

الخروج -opts الحالة

الأسباب توقع الخروج أو الاستعداد للقيام بذلك.

ال -onexit يتسبب في استخدام الوسيطة التالية كمعالج إنهاء. بدون وسيطة ، يتم إرجاع معالج الإنهاء الحالي.

ال -لا يوجد مخرج أسباب العلم توقع للتحضير للخروج ولكن لا تتوقف عن التحكم في العودة إلى نظام التشغيل. يتم تشغيل معالج الإنهاء المعرفة من قبل المستخدم بالإضافة إلى معالجات Expect الداخلية الخاصة. لا ينبغي تنفيذ أي أوامر توقع إضافية. هذا مفيد إذا كنت تقوم بتشغيل Expect مع ملحقات Tcl الأخرى. يظل المترجم الحالي (والنافذة الرئيسية في بيئة المعارف التقليدية) حتى تتمكن ملحقات Tcl الأخرى من التنظيف. إذا كان المتوقع ىخرج يتم استدعاء مرة أخرى (ولكن قد يحدث هذا) ، لا يتم إعادة تشغيل معالجات.

عند الخروج ، يتم إغلاق جميع الاتصالات بالعمليات الناتجة. سيتم الكشف عن إغلاق كـ EOF بواسطة عمليات spawned. ىخرج يأخذ أي إجراءات أخرى خارج ما يفعله الإجراء _exit (2) العادي. وبالتالي ، قد يستمر تشغيل العمليات الناتجة التي لم يتم التحقق من EOF. (هناك مجموعة متنوعة من الشروط الهامة لتحديد ، على سبيل المثال ، ما هي الإشارات التي سترسل عملية التفريغ ، ولكن هذه معتمدة على النظام ، وعادة ما يتم توثيقها تحت المخرج (3).) سيتم توريث العمليات التي تم تشغيلها التي تم تشغيلها بواسطة init.

الحالة (أو إذا لم يتم تحديد 0) كحالة الخروج توقع . ىخرج يتم تنفيذه ضمنيًا إذا تم الوصول إلى نهاية البرنامج النصي.

exp_continue -continue_timer

الامر exp_continue يسمح توقع نفسها لمواصلة التنفيذ بدلا من العودة كما تفعل عادة. بشكل افتراضي exp_continue يعيد ضبط مؤقت الوقت. ال -continue_timer يمنع منع الموقت من إعادة التشغيل. (نرى توقع للمزيد من المعلومات.)

قيمة exp_internal -f

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

إذا كان اختياري ملف يتم توفير كافة الإخراج العادي وتصحيح الأخطاء إلى ذلك الملف (بغض النظر عن قيمة القيمة ). أي ملف الإخراج التشخيصي السابق مغلق.

ال -info تؤدي العلامة إلى إرجاع exp_internal لشرح أحدث الحجج غير المعلوماتية المقدمة.

exp_open args -i spawn_id

إرجاع معرف ملف Tcl الذي يتوافق مع معرف التفرخ الأصلي. يمكن بعد ذلك استخدام معرف الملف كما لو تم فتحه بواسطة Tcl's افتح أمر. (يجب عدم استخدام معرف تفرش بعد الآن انتظر لا ينبغي تنفيذه.

ال -leaveopen flag يترك معرف spawn مفتوحًا للوصول من خلال أوامر توقع. ا انتظر يجب أن يتم تنفيذها على معرف التفرخ.

exp_pid -i spawn_id

إرجاع معرف العملية المطابق لعملية spawned الحالية. إذا كان -أنا يتم استخدام العلامة ، يتم إرجاع pid يتوافق مع معرف التفرُّد المعطى.

exp_send

هو اسم مستعار لـ إرسال .

exp_send_error

هو اسم مستعار لـ إرسال الخطأ .

exp_send_log

هو اسم مستعار لـ send_log .

exp_send_tty

هو اسم مستعار لـ send_tty .

exp_send_user

هو اسم مستعار لـ send_user .

exp_version -exit version

مفيد لتأكيد أن البرنامج النصي متوافق مع الإصدار الحالي من Expect.

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

تتألف الإصدارات من ثلاثة أرقام مفصولة بنقاط. الأول هو الرقم الرئيسي. مخطوطات مكتوبة لإصدارات توقع مع عدد رئيسي مختلف من المؤكد تقريبا لا تعمل. exp_version إرجاع خطأ إذا كانت الأرقام الرئيسية غير متطابقة.

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

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

مع ال -ىخرج العلم، توقع يطبع خطأ ويخرج إذا كان الإصدار قديمًا.

نتوقع -opts pat1 body1 … -opts patn bodyn

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

أنماط من الأحدث expect_before يتم استخدام الأمر ضمنيًا قبل أي أنماط أخرى. أنماط من الأحدث expect_after يتم استخدام الأمر ضمنيًا بعد أي أنماط أخرى.

إذا كانت الحجج على كامل توقع تتطلب العبارة أكثر من سطر واحد ، قد يتم "استجماع" كل الحجج في واحد حتى تجنب إنهاء كل سطر بخط مائل عكسي. في هذه الحالة ، ستحدث بدائل Tcl المعتادة على الرغم من الأقواس.

إذا كان النمط هو الكلمة الأساسية الفولكلوري ، يتم تنفيذ النص المقابل على نهاية الملف. إذا كان النمط هو الكلمة الأساسية نفذ الوقت ، يتم تنفيذ الجسم المقابل على مهلة. إذا لم يتم استخدام الكلمة الأساسية timeout ، يتم تنفيذ إجراء خالية ضمني عند انقضاء المهلة. فترة المهلة الافتراضية هي 10 ثوانٍ ولكن قد يتم تعيينها ، على سبيل المثال إلى 30 ، بواسطة الأمر "set timeout 30". قد يتم تعيين مهلة لانهائية بواسطة القيمة -1. إذا كان النمط هو الكلمة الأساسية الافتراضي ، يتم تنفيذ النص المقابل عند انتهاء المهلة أو نهاية الملف.

إذا تطابق النقش ، فسيتم تنفيذ النص المقابل. توقع إرجاع نتيجة الجسم (أو السلسلة الفارغة في حالة عدم تطابق أي نمط). في حالة تطابق أنماط متعددة ، يتم استخدام النموذج الذي يظهر أولاً لتحديد الجسم.

في كل مرة يصل فيها إخراج جديد ، تتم مقارنته مع كل نمط بالترتيب المسرد. وبالتالي ، قد تختبر عدم وجود تطابق من خلال جعل النموذج الأخير مضمونًا للظهور ، مثل المطالبة. في الحالات التي لا يوجد فيها موجه ، يجب عليك استخدام نفذ الوقت (تمامًا كما لو كنت تتفاعل يدويًا).

يتم تحديد الأنماط بثلاث طرق. بشكل افتراضي ، يتم تحديد الأنماط كما هو الحال مع Tcl's مطابقة السلسلة أمر. (تشبه هذه الأنماط أيضًا تعبيرات C-shell العادية التي يشار إليها عادةً بأنماط "glob"). ال -gl قد يستخدم العلم لحماية الأنماط التي قد تتطابق توقع الأعلام من القيام بذلك. يجب حماية أي نمط يبدأ بـ "-" بهذه الطريقة. (جميع السلاسل التي تبدأ بـ "-" محجوزة للخيارات المستقبلية.)

على سبيل المثال ، الجزء التالي يبحث عن تسجيل دخول ناجح. (لاحظ أن إجهاض يفترض أن يكون الإجراء المحدد في مكان آخر في البرنامج النصي.)

توقع {busy {puts busy n؛ exp_continue} فشل في إحباط "كلمة مرور غير صالحة" abort timeout abort connected}

تعتبر الأسعار ضرورية على النمط الرابع حيث أنها تحتوي على مساحة ، والتي قد تفصل النمط عن الإجراء.تتطلب الأنماط التي لها نفس الإجراء (مثل 3 و 4) سرد الإجراءات مرة أخرى. يمكن تجنب ذلك باستخدام أنماط نمط regexp (انظر أدناه). يمكن العثور على مزيد من المعلومات حول تشكيل أنماط نمط glob في دليل Tcl.

تتبع أنماط نمط regexp بناء الجملة المحدد بواسطة Tcl التعبير العادي (اختصار لأمر "التعبير العادي"). يتم تقديم أنماط regexp مع العلم -إعادة . يمكن إعادة كتابة المثال السابق باستخدام regexp على النحو التالي:

توقع {busy {puts busy n؛ exp_continue} -re "failed | invalid password" abort timeout abort connected}

كلا النوعين من الأنماط "غير مثبتة". هذا يعني أن الأنماط ليس من الضروري أن تتطابق مع السلسلة بأكملها ، ولكن يمكن أن تبدأ وتنتهي المطابقة في أي مكان في السلسلة (طالما يتطابق كل شيء آخر). استخدم ^ لمطابقة بداية السلسلة ، و $ لمطابقة النهاية. لاحظ أنه إذا لم تنتظر نهاية سلسلة ، فيمكن أن ينتهي بك الأمر بسهولة في منتصف السلسلة ، حيث يتم تكرارها من العملية الناتجة. بينما لا يزال ينتج نتائج صحيحة ، يمكن أن يبدو الإخراج غير طبيعي. وبالتالي ، يتم تشجيع استخدام $ إذا كان يمكنك وصف الأحرف بالضبط في نهاية سلسلة.

لاحظ أنه في العديد من برامج التحرير ، يتطابق ^ و $ مع بداية ونهاية الأسطر على التوالي. ومع ذلك ، نظرًا لأن المتوقع ليس موجهًا للخط ، فإن هذه الأحرف تتطابق مع بداية البيانات ونهايتها (في مقابل الخطوط) الموجودة حاليًا في المخزن المؤقت المطابق المتوقع. (أيضًا ، راجع الملاحظة أدناه على "عسر الهضم في النظام".)

ال -ex يتسبب العلم في مطابقة النمط كسلسلة "دقيقة". يتم إجراء أي تفسير ل * ، ^ ، وما إلى ذلك (على الرغم من أنه لا يزال يتعين مراعاة الاتفاقيات Tcl المعتادة). الأنماط الدقيقة دائمًا غير مثبتة.

ال -لا توجد حالة تتسبب العلامة في إحلال أحرف كبيرة من المخرجات كما لو كانت أحرف صغيرة. النمط لا يتأثر.

أثناء قراءة الإخراج ، يمكن أكثر من 2000 بايت فرض وحدات البايت السابقة "نسيان". هذا يمكن تغييره مع الوظيفة match_max . (لاحظ أن القيم الكبيرة بشكل مفرط يمكن أن تبطئ نظير النمط.) إذا patlist هو full_buffer ، يتم تنفيذ الهيئة المقابلة إذا match_max تم تلقي بايت ولم تتطابق أي أنماط أخرى. أم لا full_buffer يتم استخدام الكلمة الأساسية ، تتم كتابة الأحرف المنسية إلى expect_out (المخزن المؤقت).

إذا patlist هي الكلمة الرئيسية لا شيء والقيم الفارغة مسموح بها (عبر remove_nulls الأمر) ، يتم تنفيذ النص المقابل إذا تم مطابقة ASCII 0 واحد. لا يمكن مطابقة 0 بايت عبر أنماط glob أو regexp.

عند مطابقة نمط (أو eof أو full_buffer) ، يتم حفظ أي مخرجات مطابقة وغير متطابقة من قبل في المتغير expect_out (عازلة) . يتم حفظ ما يصل إلى 9 مطابقات سلسلة regexp في المتغيرات expect_out (1، سلسلة) عبر expect_out (9، سلسلة) . إذا كان -المؤشرات يستخدم العلم قبل نمط ، ومؤشرات البداية والنهاية (في شكل مناسب ل lrange ) من 10 سلاسل يتم تخزينها في المتغيرات expect_out (X، بدء) و expect_out (X، النهاية) حيث X هو رقم ، يناظر موقف سلسلة فرعية في المخزن المؤقت. يشير 0 إلى سلاسل مطابقة للنمط بأكمله ويتم تكوينه لأنماط الكرة الأرضية بالإضافة إلى أنماط regexp. على سبيل المثال ، إذا أنتجت عملية إخراج "abcdefgh n" ، ناتج:

نتوقع "مؤتمر نزع السلاح"

كما لو أن العبارات التالية قد تم تنفيذها:

set set_out (0، string) cd set expect_out (buffer) abcd

يتم ترك "efgh n" في المخزن المؤقت للإخراج. إذا أدت إحدى العمليات إلى إخراج "abbbcabkkkka n" ، فإن النتيجة ناتجة عن:

تتوقع - الاستجابات - "ب (ب *). * (ك +)"

كما لو أن العبارات التالية قد تم تنفيذها:

set expect_out (0، start) 1 set expect_out (0، end) 10 set expect_out (0، string) bbbcabkkkk set expect_out (1، start) 2 set expect_out (1، end) 3 set expect_out (1، string) bb set expect_out (2 ، البداية) 10 مجموعة expect_out (2 ، النهاية) 10 مجموعة expect_out (2 ، سلسلة) k set expect_out (buffer) abbbcabkkkk

ويترك "a n" في المخزن المؤقت للإخراج. نمط "*" (و - "." *) سوف تدفق المخزن المؤقت الإخراج دون قراءة أي إخراج أكثر من العملية.

عادةً ، يتم تجاهل الإخراج المتطابق من المخازن المؤقتة الداخلية Expect. هذا يمكن منعه عن طريق البادئة على نمط مع -notransfer العلم. هذا العلم مفيد بشكل خاص في التجريب (ويمكن اختصاره إلى "-not" للراحة أثناء التجريب).

يتم تخزين معرف التزاوج المرتبط بالإخراج المطابق (أو eof أو full_buffer) في expect_out (spawn_id) .

ال -نفذ الوقت يتسبب إشارة الأمر المتوقع الحالي في استخدام القيمة التالية كمهلة بدلاً من استخدام قيمة متغير timeout.

بشكل افتراضي ، يتم مطابقة الأنماط مع المخرجات من العملية الحالية ، ولكن -أنا تعلن العلامة أن الناتج من قائمة spawn_id المسماة سيتم مطابقته مع أي من الأنماط التالية (إلى التالي -أنا ). يجب أن تكون قائمة spawn_id عبارة عن قائمة مفصولة بمسافات بيضاء عن spawn_ids أو متغير يشير إلى قائمة spawn_ids هذه.

على سبيل المثال ، ينتظر المثال التالي "متصل" من العملية الحالية ، أو "مشغول" ، أو "فشل" ، أو "كلمة مرور غير صالحة" من spawn_id المسمى بـ $ proc2.

تتوقع {-i $ proc2 busy {puts busy n؛ exp_continue} -re "failed | invalid password" abort timeout abort connected}

قيمة المتغير الشامل any_spawn_id يمكن استخدامها لمطابقة الأنماط مع أي spawn_ids التي تم تسميتها مع الأخرى -أنا الأعلام في التيار توقع أمر. spawn_id من أ -أنا علم بلا نمط مرتبط (أي متبوعًا مباشرةً بحرف آخر -أنا ) متاحة لأي أنماط أخرى في نفس الوقت توقع الأمر المرتبط any_spawn_id.

ال -أنا قد يشير العلم أيضًا إلى متغير عام في هذه الحالة ، تتم قراءة المتغير للحصول على قائمة بمعرفات البيضة. يتم إعادة قراءة المتغير عندما يتغير. يوفر هذا طريقة لتغيير مصدر I / O أثناء تنفيذ الأمر. وتعرف معرّفات تفرخ هذه الطريقة باسم هويات تفرخ "غير مباشرة".

إجراءات مثل استراحة و استمر تسبب هياكل التحكم (أي إلى عن على , بروك ) على التصرف بالطريقة المعتادة. الامر exp_continue يسمح توقع نفسها لمواصلة التنفيذ بدلا من العودة كما تفعل عادة.

هذا مفيد لتجنب الحلقات الصريحة أو العبارات المتوقعة متكررة. المثال التالي جزء من جزء لأتمتة rlogin. ال exp_continue يتجنب الاضطرار إلى كتابة ثانية توقع بيان (للبحث عن المطالبة مرة أخرى) إذا طلب rogin كلمة مرور.

نتوقع {Password: {stty -echo send_user "كلمة المرور (لمستخدم $) على $ host:" expect_user -re "(. *) n" send_user " n" send "$ expect_out (1، string) r" stty echo exp_continue} كلمة مرور غير صحيحة {send_user "غير صحيحة أو الحساب n" الخروج} مهلة {send_user "اتصال بـ $ host timed out n" exit} eof {send_user "فشل الاتصال بالمضيف: $ expect_out (buffer)" exit} - إعادة المطالبة $}

على سبيل المثال ، قد يساعد الجزء التالي المستخدم في توجيه تفاعل مؤتمت بالكامل بالفعل. في هذه الحالة ، يتم وضع الجهاز في وضع raw. إذا قام المستخدم بالضغط على "+" ، فسيتم زيادة المتغير. إذا تم الضغط على "p" ، فسيتم إرسال العديد من عمليات الإرجاع إلى العملية ، ربما لتكديسها بطريقة ما ، و "i" يتيح للمستخدم التفاعل مع العملية ، ويسر بشكل فعال السيطرة على البرنامج النصي. في كل حالة ، فإن exp_continue يسمح الحالي توقع لمتابعة مطابقة النمط بعد تنفيذ الإجراء الحالي.

stty raw -echo expect_after {-i $ user_spawn_id "p" {send " r r r"؛ exp_continue} "+" {incr foo؛ exp_continue} "i" {interact؛ exp_continue} "إنهاء" الخروج

بشكل افتراضي، exp_continue يعيد ضبط مؤقت الوقت. لا يتم إعادة تشغيل جهاز ضبط الوقت ، إذا exp_continue يسمى مع -continue_timer العلم.

expect_after expect_args

يعمل مماثلة ل expect_before إلا أنه إذا كان أنماط من كليهما توقع و expect_after يمكن أن تتطابق ، و توقع نمط يستخدم. شاهد expect_before الأمر لمزيد من المعلومات.

expect_background expect_args

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

متىexpect_background يتم تقييم الإجراءات ، يتم حظر معالجة الخلفية لنفس معرف spawn. يتم إلغاء حظر المعالجة الخلفية عند اكتمال الإجراء. أثناء حظر معالجة الخلفية ، يمكن إجراء (المقدمة)توقع على نفس معرف تفرخ.

ليس من الممكن تنفيذتوقع بينماexpect_background غير محظور.expect_background يتم حذف معرف تفرخ معين عن طريق التصريح عن new_background جديد بنفس معرف تفرخ. إعلانexpect_background بدون أي نمط يزيل معرف تفرخ معين من القدرة على مطابقة الأنماط في الخلفية.

expect_before expect_args

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

إذا لم يتم تحديد أي نمط ، فلن يتم التحقق من هوية البيضة لأي أنماط.

ما لم تتخطى من قبل-أنا العلم،expect_before تتطابق الأنماط مع معرف التزاوج المحدد في الوقت الذي يكون فيهexpect_before تم تنفيذ الأمر (وليس عندما يتم مطابقة نمطه).

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

expect_before -info -i $ proc

على الأكثر قد يتم إعطاء مواصفات معرف تفرش واحد. يحجب إشارة -العشوائية معرفات تفرخ مباشرة تأتي فقط من مواصفات غير مباشرة.

بدلاً من مواصفات معرف التفرعات ، سيتسبب العلم "-all" في "-info" للإبلاغ عن كافة معرفات البيضة.

يمكن إعادة استخدام إخراج إشارة -info كـ الوسيطة المتوقعة.

expect_tty expect_args

يشبهتوقع لكنه يقرأ الأحرف من / dev / tty (أي ضربات المفاتيح من المستخدم). بشكل افتراضي ، يتم تنفيذ القراءة في الوضع المطبوخ. وبالتالي ، يجب أن تنتهي الخطوط بعائد من أجلتوقع لرؤيتهم. هذا يمكن تغييره عن طريقstty (انظرstty الأمر أدناه).

expect_user expect_args

يشبهتوقع لكنه يقرأ الأحرف من stdin (أي ضربات المفاتيح من المستخدم). بشكل افتراضي ، يتم تنفيذ القراءة في الوضع المطبوخ. وبالتالي ، يجب أن تنتهي الخطوط بعائد من أجلتوقع لرؤيتهم.هذا يمكن تغييره عن طريقstty (انظرstty الأمر أدناه).

شوكة

يخلق عملية جديدة. العملية الجديدة هي نسخة طبق الأصل من التيارتوقع معالجة. على النجاح ،شوكة إرجاع 0 إلى العملية (التابعة) الجديدة وإرجاع معرف العملية من العملية التابعة إلى عملية الأصل. عند الفشل (بسبب عدم توفر الموارد ، على سبيل المثال ، مساحة المبادلة ، الذاكرة) ،شوكة إرجاع -1 إلى العملية الأصل ، ولا يتم إنشاء أي عملية تابعة.

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

قد يتم الخلط بين بعض تطبيقات pty من قبل العديد من القراء والكتاب ، حتى للحظات. وبالتالي ، فمن الأكثر أماناشوكة قبل عمليات التبويض.

التفاعل string1 body1 … stringn bodyn

يعطي السيطرة على العملية الحالية للمستخدم ، بحيث يتم إرسال ضغطات المفاتيح إلى العملية الحالية ، ويتم إرجاع stdout و stderr من العملية الحالية.

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

إذا كانت الحجج على كاملتفاعل تتطلب العبارة أكثر من سطر واحد ، قد يتم "استجماع" كل الحجج في واحد حتى تجنب إنهاء كل سطر بخط مائل عكسي. في هذه الحالة ، ستحدث بدائل Tcl المعتادة على الرغم من الأقواس.

على سبيل المثال ، يعمل الأمر التالي على التفاعل مع أزواج السلسلة-الجسم التالية المحددة: عند الضغط على ^ Z ،توقع معلق. (ال-إعادة تعيين تقوم العلامة باستعادة أوضاع المطراف.) عندما يتم الضغط على ^ A ، يرى المستخدم "لقد قمت بكتابة عنصر تحكم -A" وتم إرسال العملية إلى ^ A. عندما يتم الضغط على $ ، يرى المستخدم التاريخ. عندما يتم الضغط على ^ C ،توقع المخارج. إذا تم إدخال "foo" ، فسيرى المستخدم "bar". عندما يتم الضغط على ~~ ، فإنتوقع مترجم يعمل بشكل تفاعلي.

set CTRLZ 032 interact {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "you typed a control-A n"؛ أرسل " 001"} $ {send_user "التاريخ هو تنسيق الساعة clock seconds."} 003 exit foo {send_user "bar"} ~~}

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

بشكل افتراضي ، مطابقة السلسلة تمامًا مع عدم وجود بطاقات wild. (في المقابل ، فإنتوقع يستخدم الأمر أنماط نمط glob بشكل افتراضي.)-ex يمكن استخدام العلم لحماية الأنماط التي قد تتطابقتفاعل الأعلام من القيام بذلك. يجب حماية أي نمط يبدأ بـ "-" بهذه الطريقة. (جميع السلاسل التي تبدأ بـ "-" محجوزة للخيارات المستقبلية.)

ال-إعادة يفرض العلم أن يتم تفسير السلسلة على أنها نمط نمط regexp. في هذه الحالة ، يتم تخزين السطوح المطابقة في المتغير interact_out بالمثل على الطريقتوقع يخزن انتاجه في المتغيرexpect_out . ال-المؤشرات يتم دعم العلم بالمثل.

النمطالفولكلوري يقدم إجراء يتم تنفيذه عند نهاية الملف. منفصلالفولكلوري نمط قد يتبع أيضا-انتاج العلم في هذه الحالة يتم مطابقته إذا تم الكشف عن eof أثناء كتابة المخرجات. الافتراضيالفولكلوري العمل هو "العودة" ، لذلكتفاعل ببساطة يعود على أي EOF.

النمطنفذ الوقت يقدم مهلة (بالثواني) والإجراء الذي يتم تنفيذه بعد قراءة أي أحرف لوقت معين. النفذ الوقت نمط ينطبق على العملية المحددة مؤخرا. لا يوجد مهلة افتراضية. المتغير الخاص "مهلة" (المستخدمة من قبلتوقع الأمر) ليس له أي تأثير على هذه المهلة.

على سبيل المثال ، يمكن استخدام العبارة التالية في autologout المستخدمين الذين لم يكتبوا أي شيء لمدة ساعة ولكنهم لا يزالون يتلقون رسائل النظام المتكررة:

interact -input $ user_spawn_id timeout 3600 return -output $ spawn_id

إذا كان النمط هو الكلمة الأساسيةلا شيء والقيم الفارغة مسموح بها (عبرremove_nulls الأمر) ، يتم تنفيذ النص المقابل إذا تم مطابقة ASCII 0 واحد. لا يمكن مطابقة 0 بايت عبر أنماط glob أو regexp.

تمهيد نمط مع العلم-انا اكتب تسبب المتغير interact_out (spawn_id) لتعيين spawn_id الذي يطابق النمط (أو eof).

إجراءات مثلاستراحة واستمر تسبب هياكل التحكم (أيإلى عن على , بروك ) على التصرف بالطريقة المعتادة. ومع ذلكإرجاع يسبب التفاعل للعودة إلى المتصل ، بينماinter_return الأسبابتفاعل تسبب عودة في المتصل. على سبيل المثال ، إذا دعا "proc foo"تفاعل والتي نفذت بعد ذلك العملinter_return , proc foo سيعود. (وهذا يعني أنه إذاتفاعل المكالماتمترجم الكتابة بشكل تفاعليإرجاع سوف يسبب التفاعل على الاستمرار ، في حينinter_return سيؤدي التفاعل إلى العودة إلى المتصل.)

أثناءتفاعل يتم استخدام وضع raw بحيث يتم تمرير كافة الأحرف إلى العملية الحالية.إذا لم تستطع العملية الحالية التقاط إشارات التحكم في الوظيفة ، فستتوقف إذا أرسلت إشارة توقف (بشكل افتراضي ^ Z). لإعادة تشغيله ، أرسل إشارة متابعة (مثل "kill -CONT"). إذا كنت تريد بالفعل إرسال SIGSTOP إلى مثل هذه العملية (بواسطة ^ Z) ، فضع في اعتبارك وضع csh أولاً ثم قم بتشغيل البرنامج. من ناحية أخرى ، إذا كنت تريد إرسال SIGSTOP إلىتوقع نفسه ، أول مترجم دعوة (ربما باستخدام حرف الهروب) ، ثم اضغط على ^ Z.

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

للسرعة ، يتم تنفيذ الإجراءات في وضع raw بشكل افتراضي. ال-إعادة تعيين العلم إعادة تعيين المحطة إلى الوضع الذي كان عليه من قبلتفاعل تم تنفيذ (وضع المطبوخة دائما). لاحظ أن الحروف التي تم إدخالها عند تبديل الوضع قد يتم فقدها (ميزة مؤسفة لبرنامج التشغيل الطرفي في بعض الأنظمة). السبب الوحيد لاستخدامها-إعادة تعيين إذا كان عملك يعتمد على التشغيل في الوضع المطبوخ.

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

إذا كان هناك صدى لصدى ، لكن أخفق في النهاية في المطابقة ، يتم إرسال الحروف إلى العملية الناتجة. إذا كانت عملية التفريخ ترددها ، فسيرى المستخدم الأحرف مرتين.-صدى صوت من المحتمل أن يكون مناسبًا فقط في الحالات التي يكون فيها من غير المحتمل أن يكمل المستخدم النمط. على سبيل المثال ، يكون المقتطف التالي من rftp ، البرنامج النصي العودي- ftp ، حيث تتم مطالبة المستخدم بإدخال ~ g ، أو p ، أو ~ l ، للحصول على ، أو وضع ، أو إدراج الدليل الحالي بشكل متكرر. هذه بعيدة جدا عن أوامر ftp العادية ، التي من المستبعد أن يكتب المستخدم ~ متبوعا بأي شيء آخر ، ما عدا عن طريق الخطأ ، وفي هذه الحالة ، من المحتمل أن يتجاهل النتيجة على أية حال.

التفاعلات {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}

ال-nobuffer تُرسل العلامة الأحرف التي تطابق النمط التالي إلى عملية الإخراج أثناء قراءة الأحرف.

يكون هذا مفيدًا عندما ترغب في السماح لبرنامج ما بالرد على هذا النمط. على سبيل المثال ، قد يتم استخدام ما يلي لمراقبة أي شخص يقوم بالاتصال (مودم على نمط Hayes). في كل مرة يظهر فيها "atd" يقوم البرنامج النصي بتسجيل بقية السطر.

proc lognumber {} {interact -nobuffer -re "(. *) r" return puts $ log "clock format clock seconds: dialed $ interact_out (1، string)"} interact -nobuffer "atd" lognumber

أثناءتفاعل والاستخدام السابق للlog_user يتم تجاهلها. خاصه،تفاعل سوف يفرض تسجيل الإخراج (يتم إرساله إلى الإخراج القياسي) حيث يفترض أن المستخدم لا يرغب في التفاعل بشكل أعمى.

ال-o يتسبب العلم في تطبيق أي زوج من الأزرار التالية على مخرجات العملية الحالية. قد يكون ذلك مفيدًا ، على سبيل المثال ، عند التعامل مع المضيفين الذين يرسلون أحرفًا غير مرغوب فيها أثناء جلسة telnet.

بشكل افتراضي،تفاعل يتوقع المستخدم أن يكتب stdin وقراءة stdout منتوقع عملية نفسها. ال-u العلم ("المستخدم") يجعلتفاعل ابحث عن المستخدم باعتباره العملية المسماة بواسطة الوسيطة الخاصة به (والتي يجب أن تكون معرّف spawned).

يسمح ذلك بربط عمليتين غير مرتبطتين معًا بدون استخدام حلقة واضحة. للمساعدة في تصحيح الأخطاء ، انتقل دائمًا إلى التشخيص stderr (أو stdout لبعض معلومات التسجيل وتصحيح الأخطاء). لنفس السبب ، فإنمترجم سيقرأ الأمر بشكل تفاعلي من stdin.

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

spawn login set login $ spawn_id spawn tip modem # dial out out to user # connect user to login interact -u $ login

لإرسال مخرجات إلى عمليات متعددة ، قم بسرد كل قائمة معروضة لبيضة تسبقها-انتاج العلم. قد يتم تحديد الإدخال لمجموعة من تفرعات إنتاج المخرجات بواسطة قائمة معرّض تفرخ مسبوقة بعلامة a-إدخال العلم. (على حد سواء-إدخال و-انتاج قد تأخذ قوائم في نفس الشكل مثل-أنا العلم فيتوقع الأمر ، إلا أن any_spawn_id ليس له معنى فيتفاعل .) يتم تطبيق كافة الأعلام والسلاسل (أو الأنماط) التالية على هذا الإدخال حتى تظهر إشارة - إدخال أخرى. إذا لا-إدخال يبدو،-انتاج ضمنيًا "-input $ user_spawn_id -output". (بالمثل ، مع الأنماط التي لم يكن لديك-إدخال .) إذا واحد-إدخال تم تحديده ، فإنه يتجاوز $ user_spawn_id. إذا كان الثاني-إدخال تم تحديده ، فإنه يتجاوز $ spawn_id. إضافي-إدخال قد يتم تحديد الأعلام.

عمليات الإدخال الضمني جهازي الافتراضية إلى تحديد النواتج الخاصة بهم spawn_id $ و $ user_spawn_id (بالعكس). اذا كان-إدخال يظهر العلم مع لا-انتاج علم ، يتم تجاهل الأحرف من تلك العملية.

ال-أنا العلم يقدم بديل ل spawn_id الحالي عندما لا شيء آخر-إدخال أو-انتاج تستخدم الأعلام. تشير العلامة A -i إلى علم -o.

من الممكن تغيير العمليات التي يتم التفاعل معها باستخدام معرفات تفرخ غير مباشرة. (يتم وصف معرفات البيضة غير المباشرة في القسم الموجود على أمر التوقع.) قد يتم تحديد معرفات البيضة غير المباشرة بأعلام -i أو -u أو -input أو -output.

مترجم args

يتسبب في مطالبة المستخدم بفاعليةتوقع وأوامر Tcl. يتم طباعة نتيجة كل أمر.

إجراءات مثلاستراحة واستمر تسبب هياكل التحكم (أيإلى عن على , بروك ) على التصرف بالطريقة المعتادة. ومع ذلكإرجاع يؤدي مترجم للعودة إلى المتصل ، بينماinter_return الأسبابمترجم تسبب عودة في المتصل. على سبيل المثال ، إذا دعا "proc foo"مترجم والتي نفذت بعد ذلك العملinter_return , proc foo سيعود. أي أسباب القيادة الأخرىمترجم لمواصلة المطالبة بالأوامر الجديدة.

بشكل افتراضي ، يحتوي الموجه على عددين. يصف العدد الصحيح الأول عمق مجموعة التقييم (أي عدد المرات التي تم فيها استدعاء Tcl_Eval). العدد الصحيح الثاني هو معرف محفوظات Tcl. يمكن تعيين المطالبة بتحديد إجراء يسمى "prompt1" تصبح قيمته المرتجعة هي الموجه التالي. إذا كانت العبارة تحتوي على علامات اقتباس مفتوحة ، أو أقواس ، أو أقواس ، أو أقواس ، فسيتم إصدار موجه ثانوي (افتراضيًا "+>") عند السطر الجديد. قد يتم تعيين المطالبة الثانوية عن طريق تحديد إجراء يسمى "prompt2".

أثناءمترجم ، يتم استخدام الوضع المطبوخ ، حتى لو كان المتصل به يستخدم وضع raw.

إذا تم إغلاق stdin ،مترجم سيعود ما لم-eof يتم استخدام العلامة ، وفي هذه الحالة يتم استدعاء الوسيطة التالية.

log_file args -a file

إذا تم توفير اسم الملف ،ملف تسجيل سوف يسجل نسخة من الجلسة (بداية عند هذه النقطة) في الملف.ملف تسجيل سوف يتوقف التسجيل إذا لم يتم تقديم أي حجة. أي ملف سجل سابق مغلق.

بدلا من اسم الملف ، قد يتم توفير معرف ملف Tcl باستخدام-افتح أو-leaveopen الأعلام. هذا هو مماثل لنسل أمر. (نرىنسل لمزيد من المعلومات.)

ال قوات العلم الانتاج ليتم تسجيلها التي تم قمعها من قبلlog_user أمر.

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

ال-info تؤدي العلامة إلى إظهار log_file لإعلام عن أحدث الحجج غير المعلومات المقدمة.

log_user -info | 0 | 1

بشكل افتراضي ، يتم تسجيل الحوار send / expect إلى stdout (و logfile إذا كان مفتوحاً). يتم تعطيل التسجيل إلى stdout بواسطة الأمر "log_user 0" وإعادة تمكينه بواسطة "log_user 1". لم يتغير تسجيل الدخول إلى ملف السجل.

ال-info تؤدي العلامة log_user إلى عرض وصف لأحدث الحجج غير المعلوماتية المقدمة.

match_max -d -i spawn_id الحجم

يعرّف حجم المخزن المؤقت (بالبايت) المستخدم داخليًا بواسطةتوقع . مع عدم وجود بحجم الوسيطة ، يتم إرجاع الحجم الحالي.

مع ال العلم ، يتم تعيين الحجم الافتراضي. (الافتراضي الافتراضي هو عام 2000.) مع-أنا ، ﻳﺘﻢ ﺿﺒﻂ اﻟﺤﺠﻢ ﻟﻤُﻌﺮف اﻟﺘﺨﻠﺺ اﻟﻤُﺴﻤّﻰ ، وﻟﻜﻦ ﻳﺘﻢ ﺿﺒﻄﻪ ﻟﻠﻌﻤﻠﻴﺔ اﻟﺤﺎﻟﻴﺔ.

تراكب - # spawn_id - # s