Linux / Unix कमांड अपेक्षा

अपेक्षा एक प्रोग्राम हो जुन एक स्क्रिप्ट अनुसार अन्य अन्तरक्रियात्मक कार्यक्रमहरूमा कुरा गर्दछ। लिपि पछ्याउँदै, अपेक्षा जान्छ कि कार्यक्रमबाट कुन कुरा आशा गर्न सकिन्छ र के सही प्रतिक्रिया हुनुपर्छ। एक व्याख्या भाषाले संवाद प्रत्यक्ष गर्न शाखा र उच्च स्तरको नियन्त्रण ढाँचाहरू प्रदान गर्दछ। यसबाहेक, उपयोगकर्ताले नियन्त्रण लिन सक्दछ र जब प्रत्यक्ष रूपमा लिङ्क गर्न सक्छ, पछि स्क्रिप्टमा नियन्त्रण फर्काउँछ।

Expectk अपेक्षा र टीके को एक मिश्रण हो। यो अपेक्षा र टीकेको इच्छा जस्तै व्यवहार गर्दछ। अपेक्षा पनि सी सी सी सी ++ को बिना Tcl बिना प्रयोग गर्न सकिन्छ।

नाम "अपेक्षा" को विचार बाट आउँछ / अपेक्षित अनुक्रमहरू यूकप, कर्मिट र अन्य मोडेम नियन्त्रण कार्यक्रम द्वारा लोकप्रिय छ। यद्यपि यूकपको विपरीत, अपेक्षा सामान्य छ ताकि यो कुनै पनि कार्यक्रम र कार्यसँग प्रयोगकर्ता-तह आदेशको रूपमा चलाउन सकिन्छ। अपेक्षा एकै समयमा धेरै प्रोग्रामहरू कुरा गर्न सक्नुहुन्छ।

के आशा गर्न सक्छ

उदाहरणका लागि, यहाँ केहि चीजहरू छन् जुन आशा आदेश गर्न सक्दछ:

त्यहाँ शेलले यी कार्यहरू प्रदर्शन गर्न सक्दैन किन विभिन्न कारणहरू छन्। सबै सम्भव छ सम्भव छ।

सामान्यमा, आशा कुनै पनि प्रोग्राम चलाउनको लागी उपयोगी छ जुन प्रोग्राम र प्रयोगकर्ता बीचको अन्तर्क्रिया आवश्यक छ। सबै आवश्यक छ कि अन्तरक्रिया कार्यक्रमको कार्यक्रममा विशेषता हुन सक्छ। अपेक्षित प्रोग्राम नियन्त्रण गर्न रोक्न प्रयोगकर्तालाई पनि फिर्ता नियन्त्रण दिन सक्छ। त्यसै गरी, प्रयोगकर्ताले स्क्रिप्टमा कुनैपनि समयमा नियन्त्रण गर्न सक्दछ।

उपयोग

अपेक्षित कार्य गर्न आदेशहरूको सूची cmdfile पढ्छ। अपेक्षित प्रणालीमा स्पष्ट रूपमा बोलाउन सकिन्छ जुन #! लिपिलाई कार्यान्वयनयोग्य रूपमा लिपि चिन्ह लगाउँदै र लिपिमा पहिलो रेखा बनाउने:

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

निस्सन्देह, पथ सही ढंगले वर्णन गर्नु पर्छ जहाँ अपेक्षा जीवन हुन्छ। / usr / local / bin मात्र एउटा उदाहरण हो।

स्क्रिप्टमा कुनै पनि अघि कार्यान्वयन गर्न -c फ्ल्यागले आदेशलाई प्राथमिकता दिन्छ। शेलद्वारा तोड्न रोक्नको लागि आदेश उद्धृत गरिएको हुनुपर्छ। यो विकल्प धेरै पटक प्रयोग गर्न सकिन्छ। एकाधिक आदेशहरू एकल -c सँग सिङ्क गर्न सकिन्छ जसले तिनीहरूलाई अर्धको साथ विभाजित गर्दछ। आदेशहरू तिनीहरू क्रम देखा पर्दा निष्पादित छन्। Expectk को प्रयोग गर्दा यो विकल्प को रूप मा निर्दिष्ट गरिएको छ।

The -d flag ले केहि नैदानिक ​​आउटपुट सक्षम गर्दछ, जसले मुख्य रूपमा आदेश र अन्तरक्रिया जस्ता आदेशहरूको आन्तरिक गतिविधि रिपोर्ट गर्दछ। यो ध्वजसँग "exp_internal 1" को रूपमा अपेक्षित लिपिको शुरुआतमा उही प्रभाव छ, साथै अपेक्षाको संस्करण छापिएको छ।

The -D flag ले एक अन्तरक्रियात्मक डिबगर सक्षम गर्दछ। एक पूर्णांक मान को पालन गर्नु पर्छ। डिबगरले अर्को Tcl प्रक्रिया अघि नियन्त्रण गर्दछ यदि मान गैर-शून्य वा यदि ^ ^ थिचिएको छ वा ब्रेकपोइन्ट हिट हुन्छ वा स्क्रिप्टमा अन्य उपयुक्त डिबगर आदेश देखा पर्दछ। Expectk को प्रयोग गर्दा यो विकल्प निर्दिष्ट गरिएको छ - डिबग।

-f फ्लैगले फाइललाई पूर्वनिर्धारित पढ्नबाट रोक्दछ। झण्डा आफै वैकल्पिक हो किनकि # प्रयोग गरेर मात्र यो उपयोगी छ! अधिसूचना, ताकि अन्य तर्क को आदेश लाइन मा आपूर्ति गरिन सक्छ। Expectk को प्रयोग गर्दा, यस विकल्प को रूपमा निर्दिष्ट गरिएको छ -फाइल।

पूर्वनिर्धारित रूपमा, कमांड फाईल मेमोरीमा पढाई र यसको सम्पूर्णतामा क्रियान्वित गरिएको छ। यो समयमा कहिलेकाँही फाइलहरू एक रेखा पढ्न वांछनीय हुन्छ। मनोनयन फाइलहरू यस तरिकालाई हस्तान्तरण गर्न बल दिनका लागि, -b झण्डा प्रयोग गर्नुहोस्। Expectk को प्रयोग गर्दा यो विकल्प को रूप मा निर्दिष्ट गरिएको छ।

यदि स्ट्रिङ "-" फाइलनामको रूपमा आपूर्ति गरिन्छ भने यसको सट्टा मानक इनपुट पढ्न सकिन्छ। "# /" "" "#:" "" #: ""

-i झण्डा कारणहरूले अन्तरक्रियात्मक रूपमा फाइलबाट तिनीहरूलाई पढ्नको सट्टा आदेशहरूको लागि प्रस्ट पार्दछ। प्रलोभन बाहिर निस्कने आदेश वा EOF मार्फत समाप्त हुन्छ। यदि-कमान्ड फाइल nor -c प्रयोग गरिएको छैन भने -i झण्डा लगाइन्छ। Expectk प्रयोग गर्दा, यो विकल्प निर्दिष्ट रूपमा निर्दिष्ट गरिएको छ।

- विकल्पहरूको अन्त विलम्ब गर्न प्रयोग गर्न सकिन्छ। यो उपयोगी छ यदि तपाईं आफ्नो लिपिको विकल्प विकल्प जस्तै तर्क पास गर्न चाहानुहुन्छ भने यो अपेक्षा द्वारा व्याख्या गरिएको छ। यसले प्रयोगात्मक रूपमा # मा राख्न सकिन्छ। आशा द्वारा कुनै पनि झण्डा रहित व्याख्या रोक्न लाइन। उदाहरणको लागि, निम्न चर तर्कमा स्क्रिप्ट नाम सहित मूल तर्कहरू छोडिनेछ।

#! / usr / local / bin / expect -

ध्यान दिनुहोस् कि सामान्य getopt (3) र कार्यान्वयन (2) अधिवेशनहरू देखा पर्दछ जब तर्कहरू थप्न #! लाइन।

फाइल $ exp_library / expect.rc यदि वर्तमानमा स्वचालित रूपमा sourced छ, नभएसम्म -एन फ्ल्याग प्रयोग गरिन्छ। (Expectk प्रयोग गर्दा, यस विकल्पको रूपमा निर्दिष्ट गरिएको छ - NORC।) यो तुरुन्तै पछि, फाइल ~ / .expect.rc स्वचालित रूपमा sourced छ, नभएसम्म -अनम फ्ल्याग प्रयोग गरिन्छ। यदि वातावरण चर DOTDIR परिभाषित गरिएको छ, यो डाइरेक्टरीको रूपमा व्यवहार गरिन्छ र .expect.rc त्यहाँबाट पढिएको छ। Expectk को प्रयोग गर्दा यो विकल्प निर्दिष्ट गरिएको छ। यो सोर्सिङले कुनै पनि -c फ्ल्यागहरू कार्यान्वयन गरेपछि मात्र हुन्छ।

-v कारणले यसको संस्करण संख्या मुद्रण गर्न र बाहिर निस्कने आशा गर्दछ। Expectk मा सम्बन्धित झण्डा, जुन झण्डा झण्डा नामहरू प्रयोग गर्दछ, उल्टाउने हो।

वैकल्पिक आर्ग्सहरू सूचीमा निर्माण गरिएका छन् र चर नाममा argv मा भण्डारण गरिएको छ। argc arg arg को लम्बाईमा प्रारम्भ गरिएको छ।

Argv0 लिपि प्रयोग गरिएको यदि लिपि वा बाइनरीको नाम परिभाषित गरिएको छ। उदाहरणका लागि, लिपिको नाम र पहिलो तीन तर्कहरू निम्न मुद्रित गर्दछ:

send_user "$ argv0 [lrange $ argv 0 2] \ n"

आदेशहरू

अपेक्षा यन्त्र उपकरण भाषा प्रयोग गर्दछ। Tcl नियन्त्रण प्रवाह (यदि, को लागि, तोड) प्रदान गर्दछ, अभिव्यक्ति मूल्यांकन र पुनरुत्थान र प्रक्रिया परिभाषा जस्ता धेरै अन्य विशेषताहरु। आदेशहरू यहाँ प्रयोग गरियो तर परिभाषित गरिएको छैन (सेट, यदि, कार्यान्वयन) Tcl आदेशहरू छन्। आशाले थप आदेशहरू समर्थन गर्दछ। अन्यथा निर्दिष्ट नभएसम्म आदेशहरू खाली स्ट्रिंग फर्काउँछ।

आदेशहरू वर्णमाला सूचीबद्ध छन् ताकि तिनीहरू चाँडो अवस्थित हुन सक्दछ। यद्यपि, नयाँ प्रयोगकर्ताले यो क्रममा स्पन, पठाउनुहोस्, आशा र अन्तरक्रियाको विवरणहरू पढ्न सजिलो गर्न सक्दछ।

बन्द [-slave] [-onexec 0 | 1] [-i spawn_id]

हालको प्रक्रियामा जडान बन्द गर्दछ। प्रायः अन्तरक्रियात्मक प्रोग्रामहरूले EOF पत्ता लगाउँछन् उनीहरूको स्टिनिनमा र बाहिर निस्कन; यस प्रकार सामान्यतया प्रक्रियालाई पनि मार गर्न पर्याप्त हुन्छ। इन-फ्लैगले नामलाई स्पोन_इडसँग सम्बन्धित गर्ने प्रक्रियालाई घोषणा गर्दछ।

जब हालको प्रक्रिया बाहिर निस्कन्छ र निस्सन्देही नै नजिक हुन्छ दुवै आशा र अन्तरक्रिया पत्ता लगाउनेछ, तर यदि तपाईंले यो प्रक्रियालाई हारेको हो भने, भन्नुहोस् "$ pid लाई मारेर कार्यान्वयन गर्नुहोस्", तपाइँलाई स्पष्ट रूपमा कल गर्न आवश्यक छ

-onexec फ्लैगले निर्धारित गर्दछ कि स्पन आईडी कुनै नयाँ नयाँ प्रक्रियाहरूमा बन्द छ वा यदि प्रक्रिया ओभरलेटेड छ भने। एउटा स्पोन आईडी खुला छोड्नको लागि, मान 0. प्रयोग गर्नुहोस्। एक गैर-शून्य पूर्णाङ्क मानले कुनै पनि नयाँ प्रक्रियाहरूमा बन्द बन्द गर्यो।

-स्लेभ फ्लैग स्पोन आइडीसँग सम्बन्धित दास बन्द गर्दछ। जब जडान बन्द हुन्छ, दास स्वचालित रूपमा बन्द हुन्छ यदि यो अझै खुला छ।

कुनै पनि कुरा होइन कि कनेक्सन स्पष्ट रूपमा वा स्पष्ट रूपमा बन्द गरिएको छैन, तपाईंले सम्बन्धित केर्नेल प्रक्रिया स्लट खाली गर्न पर्ख्नु पर्छ। नजिकको आदेश रुको कल गर्दैन किनकि त्यहाँ कुनै पनि ग्यारेन्टी छैन जुन प्रक्रिया जडान बन्द गर्नबाट बाहिर निस्कनेछ।

डिबग [[-अन्तिम] 0 | 1]

एक Tcl डिबगर नियन्त्रण गर्न तपाईंलाई बयान मार्फत र ब्रेकस्पट सेट गर्न अनुमति दिन्छ।

कुनै तर्कको साथ, डिबगर चलिरहेको छैन भने 1 फर्काउँछ, अन्यथा 0 फर्काइएको छ।

1 तर्कको साथ, डिबगर सुरु भयो। 0 तर्कको साथ, डिबगर रोकिएको छ। यदि 1 तर्कलाई झण्डा झण्डा द्वारा अघिल्लो छ, डिबगर तत्काल सुरु भयो। अन्यथा, डिबगर अर्को Tcl बयानको साथ सुरु भएको छ।

डिबग आदेशले कुनै जाल परिवर्तन गर्दैन। यसलाई तुलना गर्नुहोस् -D झण्डाको साथ अपेक्षा गर्न।

विच्छेदन आदेश टर्मिनलबाट फर्काइएको प्रक्रियालाई जडान गर्दछ। यो पृष्ठभूमिमा चलिरहेको छ। प्रक्रियालाई आफ्नै प्रक्रिया समूह दिइएको छ। मानक I / O लाई पुनर्निर्देशित गरिएको छ / dev / null

पृष्ठभूमिमा स्क्रिप्ट चलाउनको लागि निम्न टुक्राले विच्छेदन प्रयोग गर्दछ।

यदि {[काँटा]! = 0} बाहिर निस्कनुहोस्। । ।

निम्न लिपिले पासवर्ड पढ्दछ र त्यसपछि हरेक घण्टा चलाएको एक कार्यक्रम चलाउँछ जुन जुनसुकै बेला चलाईएको पासवर्डको प्रयोग गर्दछ। स्क्रिप्टले पासवर्ड आपूर्ति गर्दछ ताकि तपाईले एक पटक मात्र यसलाई टाइप गर्नु पर्दछ।

send_user "पासवर्ड? \" expect_user -re "(। *) \ n" को लागि {} 1 {} {यदि {[काँटा]! = 0} {sleep 3600; continue} बिच्छेदन स्पोन priv_prog आशा गर्नुहोस् पासवर्ड: "$ expect_out" 1, string) \ r "। । । बाहिर निस्कनुहोस्}

अन्ड्रोक्र्रोस प्रक्रिया प्रोसेस (&) मा विच्छेदन प्रयोग गर्ने एउटा फायदा हो कि आशाले टर्मिनल प्यारामिटरहरू विच्छेद भन्दा पहिले सुरक्षित गर्न सक्छ र त्यसपछि तिनीहरूलाई नयाँ ptys मा लागू गर्न सक्छ। साथ, अपेक्षा टर्मिनलको मापदण्डहरू पढ्नको लागि मौका छैन किनकि टर्मिनल पहिले देखि नै समय अपेक्षा प्राप्त नियन्त्रणबाट विच्छेद भएको छ।

बाहिर निस्कनुहोस् [-ओप्स] [स्थिति]

बाहिर निस्कने वा अन्यथा गर्न को लागी तयार गर्न अपेक्षा गर्दछ।

-onexit झण्डाले अर्को तर्कलाई बाहिर निस्कने ह्यान्डलरको रूपमा प्रयोग गर्ने कारण दिन्छ। एक तर्क बिना, हाल बाहिर निकल ह्यान्डलर फर्काइएको छ।

-ओक्सक्सिट झण्डा कारणहरू बाहिर निस्कन तर अपरेटिङ प्रणालीमा वास्तवमा फर्काउने नियन्त्रण छोटो बन्द गर्न अपेक्षा गर्दछ। प्रयोगकर्ता-परिभाषित एक्जिट ह्यान्डलर र साथको अपेक्षाको आफ्नै आन्तरिक हैंडलर चलाइन्छ। कुनै थप अपेक्षा आदेशहरू कार्यान्वित गरिनुपर्दछ। यो उपयोगी छ यदि तपाईं दौडिरहनु भएको छ भने अन्य Tcl एक्सटेन्सनको साथ। हालको शब्दावली (र Tk वातावरणमा यदि मुख्य सञ्झ्याल) बनी रहेको छ भने अन्य Tcl विस्तारहरू सफा गर्न सक्दछ। यदि अपेक्षा बाहिर निस्कन्छ भनिन्छ (तथापि यो हुन सक्छ), हैंडलरहरू रेनुन छैनन्।

बाहिर निस्कँदा, प्राय: प्रसोधन प्रक्रियाहरूमा सबै जडानहरू बन्द छन्। स्पेस प्रक्रियाहरू द्वारा EOF को रूपमा बन्द गरिनेछ। बाहिर निस्कन कुनै अन्य क्रियाकलापहरू जुन सामान्य _exit (2) प्रक्रिया हो भन्दा बाहिर परेछ। यसैले, प्रक्रियाहरु जो EOF को लागि जाँच नगर्ने को लागी जारी रहन सक्छ। (उदाहरणका लागि, कुन चिन्हले प्रशोधन प्रक्रियालाई संकेत गर्दछ, विभिन्न प्रकारका सर्तहरू महत्त्वपूर्ण छन्, तर यी प्रणाली-आधारित, सामान्यतया दस्तावेजबाट बाहिर निस्क्रिय हुन्छन् (3)।) स्पाइन्ड गरिएको प्रक्रियाहरू जुन चलिरहनु जारी राखिनेछ इन्टिटद्वारा विरासत गरिनेछ।

स्थिति (वा 0 तोकिएको छैन भने) फर्काइएको बाहिरको स्थितिको रूपमा फर्काइन्छ। बाहिर निस्किन्छ भने स्क्रिप्टको अन्त्यमा पुगेको छ।

exp_continue [-continue_timer]
आदेश exp_continue ले सामान्यतया के रूपमा फर्काउनु भन्दा सट्टा कार्यान्वयन जारी राख्न अनुमति दिन्छ। पूर्वनिर्धारित रूपमा exp_continue ले टाइमआउट टाइमर रिसेट गर्दछ। The -continue_timer flag ले टाइमरलाई पुन: सुरु गर्न रोक्छ। (थप जानकारीको लागि आशा हेर्नुहोस्।)

exp_internal [-f फाइल] मान
यदि निदान शून्य हो भने स्ट्रर्डरको अपेक्षा गर्न को लागी निदान जानकारी आन्तरिक पठाउन थप आदेशहरू उत्पन्न गर्दछ। यो आउटपुट असक्षम गरिएको छ भने मूल्य 0 हो। निदान जानकारीले प्रत्येक वर्ण प्राप्त गर्यो, र प्रत्येक प्रयासले ढाँचाका विरूद्ध वर्तमान उत्पादनसँग मेल खान्छ।

यदि वैकल्पिक फाइल प्रदान गरिएको छ भने, सबै सामान्य र डिबगिङ आउटपुट फाइलमा लेखिएको छ (मूल्यको मूल्य बिना)। कुनै अघिल्लो नैदानिक ​​आउटपुट फाइल बन्द छ।

Theinfo flag ले exp_internal लाई दिईएको हालको गैर-जानकारी तर्कको विवरण फर्काउनको कारण हो।

exp_open [args] [-i spawn_id]
मूल स्पनो आइडीसँग मेल खाने Tcl फाइल परिचयकर्ता फर्काउँछ। फाइल पहिचानकर्ता त्यसपछि यसको प्रयोग गर्न सकिन्छ यदि यो Tcl खुला खुला आदेश द्वारा खोलिएको थियो। (स्पोनआईडी अब प्रयोग हुँदैन। एक प्रतीक्षा कार्यान्वित गर्नु हुँदैन।

-भीभोभिन फ्ल्याग अपेक्षा आदेशहरू मार्फत पहुँचको लागि स्पोन आइडी खोल्छ। एक पर्दा स्पोन आइडीमा निष्पादित गर्नु पर्छ।

exp_pid [-i spawn_id]
हालै मर्ज गरिएको प्रक्रियासँग सम्बन्धित प्रक्रिया आईडी फर्काउँछ। यदि -i झण्डा प्रयोग गरिन्छ भने, pid लाई दिइएको स्पोन आइडीसँग मेल खान्छ।

exp_send
पठाउनको लागि एक उपनाम हो।

exp_send_error
send_error को लागि एक उपनाम हो।

exp_send_log
send_log को लागि एक उपनाम हो।

exp_send_tty
send_tty को लागि एक उपनाम हो।

exp_send_user
send_user को लागि एक उपनाम हो।

exp_version [[-exit] संस्करण]
स्क्रिप्टको हालको संस्करणसँग संगत छ भन्ने आश्वासनका लागि उपयोगी छ।

कुनै तर्कको साथ, आशाको हालको संस्करण फर्काइएको छ। यो संस्करण तपाइँको स्क्रिप्टमा एन्कोड गरिएको हुन सक्छ। यदि तपाइँ वास्तवमा थाहा छ कि तपाइँ भर्खरका संस्करणहरूको सुविधाहरू प्रयोग गर्नुहुन्न भने, तपाइँ पहिलेको संस्करण निर्दिष्ट गर्न सक्नुहुनेछ।

संस्करणहरू डटहरू द्वारा विभाजित तीन संख्याहरू समावेश हुन्छन्। पहिलो मुख्य नम्बर हो। विभिन्न प्रमुख नम्बरको साथ अपेक्षाको संस्करणहरूको लागि लिखित लिपिहरू लगभग निश्चित रूपमा काम गर्दैनन्। यदि विस्तारित संख्याहरू मेल खाँदैन भने विस्तार_ त्रुटिले एउटा त्रुटि फर्काउँछ।

दोस्रो सानो अक्षर हो। हालको संस्करण भन्दा ठूलो अल्प संख्याको साथ संस्करणको लागि लिखित लिपिहरू केही नयाँ सुविधामा निर्भर हुन सक्छ र सम्भव नहुन सक्छ। एक्सटेन्जरले त्रुटि फर्काउँछ यदि प्रमुख संख्याहरू मेल खाँदैन, तर स्क्रिप्टको सानो संख्या चलिरहेको अपेक्षा भन्दा ठूलो छ।

तेस्रो नम्बर हो जुन संस्करणको तुलनामा कुनै भाग खेल्छ। तथापि, जब यो अपेक्षा सफ्टवेयर वितरण कुनै पनि तरिकामा परिवर्तन गरिएको हुन्छ, यो अतिरिक्त वृद्धि हुन्छ, जस्तै अतिरिक्त कागजात वा अप्टिमाइजेसन। यो हरेक नयाँ सानो संस्करणमा 0 मा रिसेट हुन्छ।

-exit flag को साथ, एक छाप को प्रिंट को अपेक्षा गर्दछ र यदि संस्करण देखि बाहिर छ भने निकल्छ।

आशा [[-पट्टि] pat1 शरीर 1] ... [-पट्टि] patn [bodyn]
एक पैटर्नमा उत्पन्न प्रक्रियाको आउटपुटसँग मेल खान्छ, एक निर्दिष्ट समय अवधि बितिसकेको छ वा अन्त्यको फाईल देख्न सकिन्छ। यदि अन्तिम निकाय खाली छ भने, यसलाई हटाउन सकिन्छ।

भर्खरैको अपेक्षा_मार्ग भन्दा ढाँचाहरू कुनै पनि अन्य ढाँचाहरू भन्दा स्पष्ट रूपमा प्रयोग गरिन्छ। सबैभन्दा हालको expect_after आदेश बाट ढाँचाहरू कुनै अन्य ढाँचा पछि अनुकलित रूपमा प्रयोग गरिन्छ।

यदि सम्पूर्ण आशा बयानमा तर्कहरू एकै भन्दा बढी रेखाको आवश्यकता पर्दछ भने, सबै तर्कहरू "braced" हुन सक्छ जसमा प्रत्येक रेखालाई ब्याकस्ल्याशबाट टाढा टाढाबाट बचाउन सकिन्छ। यो एक मामला मा, ब्रेसिज को बावजूद सामान्य Tcl प्रतिस्थापन हुनेछ।

यदि एक ढाँचा कीवर्ड ईफ हो भने, सम्बन्धित निकायको अन्त-फाइलमा क्रियान्वित गरिएको छ। यदि ढाँचा शब्दव्यापी टाइमआउट हो भने, यो शरीर टाइमआउटमा क्रियान्वित गरिएको छ। यदि कुनै टाइमआउट कुञ्जीशब्द प्रयोग गरिएन भने, समयसमाप्तिमा निस्क्रिय निल कार्य निष्पादित गरिएको छ। पूर्वनिर्धारित टाइमआउट अवधि 10 सेकेन्ड हो तर सेट गर्न सकिन्छ, उदाहरणका लागि 30, आदेश "सेट टाइमआउट 30" द्वारा। एक अनंत टाइमआउट मान -1 द्वारा नामित गर्न सकिन्छ। यदि ढाँचा कीवर्ड डिफल्ट छ भने , सम्बन्धित निकायले टाइमआउट वा अन्त-अफ-फाइलमा क्रियान्वित गरिएको छ।

यदि ढाँचा म्याचहरू भने, त्यसपछि सम्बन्धित शरीरलाई क्रियान्वित गरिएको छ। शरीरको नतिजा फर्काउँछ (वा खाली स्ट्रिङ यदि कुनै ढाँचा मेल खाने छैन)। कार्यक्रममा बहुविध ढाँचाहरू मेल खाने, पहिला देखा पर्ने एक शरीर चयन गर्न प्रयोग गरिन्छ।

प्रत्येक पटक नयाँ उत्पादन आउँदछ, यो सूचीबद्ध भएको क्रममा प्रत्येक ढाँचाको तुलनामा हो। यसकारण, तपाइँ अन्तिम पद्धति बनाएर म्याचको अनुपस्थितिको लागि परीक्षण गर्न सक्नुहुनेछ जुन केही कुरा देखा पर्ने निश्चित छ, जस्तै संकेत। कुनै अवस्थाहरूमा जहाँ कुनै द्रुत छैन, तपाईले टाइमआउटको प्रयोग गर्नु पर्छ (जस्तै यदि तपाईं म्यानुअल रूपमा अन्तरक्रिया गर्नुहुनेछ भने)।

ढाँचा तीन तरिकामा निर्दिष्ट गरिएको छ। पूर्वनिर्धारित रूपमा, ढाँचाहरू Tcl को string match command सँग निर्दिष्ट गरिएको छ। (त्यस्ता पद्धतिहरू पनि सी-शेल नियमित अभिव्यक्तिको समान हो "सामान्यतया" विश्वव्यापी "ढाँचाको रूपमा उल्लेख गरिएको छ)। -ग्लगल ध्वजले ढाँचाहरू को रक्षा गर्न प्रयोग गर्न सक्छ जुन अन्यथा सम्भवतः झण्डै आशा झण्डै मेल खान्छ। "-" सँग सुरु हुने कुनै पनि प्याटर्न यस तरिकालाई सुरक्षित गरिनु पर्छ। ("" "को साथ सुरु हुने सबै स्ट्रिङ भविष्यका विकल्पहरूका लागि आरक्षित छन्।)

उदाहरणका लागि, निम्न अंशले सफल लगइनको लागि लगाउँछ। (ध्यान दिनुहोस् कि लिपिमा अन्यथा परिभाषित कार्यविधि हुन अवरोध हुन्छ।)

आशा गर्नुहोस् {busy {puts busy \ n; exp_continue} असफल भयो "अवैध पासवर्ड" रद्द गरिएको समय समाप्त abort जोडिएको}

चौथो ढाँचामा उद्धरणहरू आवश्यक छन् किनभने यसमा एउटा स्पेस छ, जुन अन्यथा कार्यबाट ढाँचा अलग हुनेछ। एउटै कार्य (जस्तै तेस्रो र चौथो) को ढाँचाले फेरि कार्यहरू सूचीबद्ध गर्न आवश्यक छ। यो regexp शैली ढाँचा प्रयोग गरेर जोगिन सक्छ (तल हेर्नुहोस्)। विश्वव्यापी शैलीका ढाँचाहरू बनाएर थप जानकारी Tcl पुस्तिकामा फेला पार्न सकिन्छ।

Regexp-style patterns Tcl को regexp द्वारा परिभाषित वाक्यलाई पछ्याउनुहोस् (छोटो "नियमित अभिव्यक्ति" को लागि छोटो)। रेजेन्सी ढाँचाहरू झण्डा -रेका साथ प्रस्तुत गरिएका छन्। अघिल्लो उदाहरणले regexp को प्रयोग गरेर पुन: प्राप्त गर्न सकिन्छ:

आशा गर्नुहोस् {busy {puts busy \ n; exp_continue} -रे "असफल | अवैध पासवर्ड" रद्द गर्नुहोस् टाइमआउट abort जोडिएको}

दुबै प्रकारका ढाँचाहरू "अनबन्च" छन्। यसको अर्थ ढाँचामा सम्पूर्ण स्ट्रिङसँग मेल खाँदैन, तर सुरु गर्न सकिँदैन जहाँ पनि कुनै पनि स्ट्रिङमा म्याच समाप्त हुन्छ (जबसम्म सबै केहि मेल खान्छ)। ^ को प्रयोग को लागी एक string को शुरुवात गर्न को लागी, र $ मा म्याच गर्न को लागी। ध्यान दिनुहोस् कि यदि तपाई स्ट्रिंगको अन्त्यको लागि पर्खनुहुन्न भने, तपाइँका जवाफहरू स्ट्रैक बीचको बीचमा सजिलै समाप्त हुन सक्दछ किनकि तिनीहरू प्रायोजित प्रक्रियाबाट गुमाएका छन्। तथापि सही परिणामहरू उत्पादन गर्दा, उत्पादनले अप्ठ्यारो लाग्न सक्छ। यसैले, यदि $ स्ट्रिंगको अन्त्यमा तपाईं क्यारेक्टरहरू वर्णन गर्न सक्नुहुनेछ भने $ को प्रयोग गरिन्छ।

ध्यान दिनुहोस् कि धेरै सम्पादकहरूमा, ^ ^ $ $ क्रमशः रेखाहरूको सुरुवात र अन्तसँग मेल खान्छ। हुनत, किनकी आशा रेखा रेखा उन्मुख छैन, यी क्यारेक्टरहरू हाल मिल्ने आशा बफरमा डेटाको सुरुवात र अन्त्यसँग मेल खान्छ। (साथै, "प्रणाली भित्तामा" तल रहेको नोट हेर्नुहोस्।)

Theexex flag को ढाँचा को "सटीक" स्ट्रिङ को रूप मा मिलन को कारण बनता छ। कुनै पनि व्याख्या *, ^, आदि बनाइन्छ (यद्यपि सामान्य Tcl कन्भेन्सनहरू अझै देखा पर्नुपर्दछ)। सटीक ढाँचाहरू सधैं अनबच गरियो।

नोनस झण्डाले उत्पादनको ठूलो अक्षरहरू तुलना गर्नका लागि तुलना गर्दा यदि तिनीहरू सानो अक्षरहरू थिए। ढाँचा प्रभावित छैन।

आउटपुट पढ्दा, 2000 भन्दा बढी बाइटहरू पहिले बाइट्स "भूल" हुन सक्दछ। यो प्रकार्य मेल_max सँग परिवर्तन हुन सक्छ। (ध्यान दिनुहोस् कि अत्यधिक मात्रामा ठूलो मानहरू ढाँचा मिल्दो ढिलो हुन सक्छ।) यदि प्याटललिस्ट पूर्ण_बफरभने , सम्बन्धित शरीरले म्याच म्याक्सक्स बाइट्स प्राप्त गरिसकेको छ भने कुनै अन्य ढाँचाहरू मेल खाएनन्। Full_buffer खोजशब्द प्रयोग गरिएको वा चाहे छैन, बिर्सिएको क्यारेक्टर expected_out (बफर) लाई लेखिएको छ।

यदि पतलिस्ट शब्दशब्द निलम्बन हो , र निल अनुमतिहरू ( हटाउने हटाउने आदेशमार्फत ), सम्बन्धित निकायलाई एक्कासि गरिन्छ यदि एकल ASCII 0 सँग मिल्दछ। 0 बाइटहरू मेल खाने सम्भव छैन विश्वव्यापी वा regexp ढाँचा मार्फत।

एक ढाँचा (या eof वा full_buffer सँग मिल्ने), कुनै मिल्दो र पहिले बेजोड आउटपुट चर expected_out (बफर) मा बचत गरिएको छ। 9 सम्म regexp substring म्याचहरू चरमा बचत_ (1, स्ट्रिङ) मा expect_out (9, स्ट्रिङ) मा बचत हुन्छन्। यदि पङ्क्ति पहिले झण्डा प्रयोग गरिन्छ भने, 10 स्ट्रिंगहरूको सुरुवात र समाप्ति गरिएका इन्डेक्सहरू ( लैंगेन्सको लागि उपयुक्त एक फारममा) चर__ (स्टार्ट)expect_out (X, अन्त) मा भण्डार गरिएको छ जुन एक्स छ अंक, बफरमा सबस्ट्रिङ स्थितिसँग मेल खान्छ। 0 ले स्ट्रिङलाई बुझाउँछ जुन सम्पूर्ण ढाँचा मिलाईयो र विश्वव्यापी ढाँचाका लागि उत्पन्न हुन्छ र साथै regexp ढाँचाहरू। उदाहरणका लागि, यदि प्रक्रियाले "abcdefgh \ n" को उत्पादन उत्पादन गरेको छ, यसको परिणाम:

expect "cd"

जस्तो कि निम्न कथनहरु लाई निष्पादित गरेको छ:

आशा expectout (0, string) सीडी सेट expect_out (बफर) abcd

र "efgh \ n" आउटपुट बफरमा बायाँ छ। यदि प्रक्रियाले "abbbcabkkkka \ n" उत्पादन उत्पन्न गर्यो भने, यसको परिणाम:

expect -indices -re "b (b *)। * (k +)"

जस्तो कि निम्न कथनहरु लाई निष्पादित गरेको छ:

(0, अन्त) 1 set expect_out (0, अन्त) 10 सेट expect_out (0, स्ट्रिङ) bbbcabkkkk set expect_out (1, सुरु) 2 set expect_out (1, अन्त) 3 set expect_out (1, string) bb set expect_out (2, शुरू) 10 set expect_out (2, अन्त) 10 set expect_out (2, string) k set expect_out (बफर) abbbcabkkkk

र "एक \ n" आउटपुट बफर मा बायाँ छ। ढाँचा "*" (and -re "। *") ले आउटपुट बफरलाई प्रक्रियाबाट कुनै पनि आउटपुट पढ्न सकेन।

साधारणतया, मिलान गरिएको उत्पादन अपेक्षाको भित्री बफरबाट खारेज गरिएको छ। यो -नोट्रोफर फ्लैगको साथ ढाँचा पूर्वनिर्धारित द्वारा रोकिएको हुन सक्छ। यो झण्डा विशेष गरी प्रयोगमा उपयोगी छ (र सुविधाको लागि "नन" "" प्रयोग गर्दा प्रयोग गर्न सकिन्छ)।

मिल्दो उत्पादन (वा इफ वा पूर्ण_बफर) सँग सम्बन्धित स्पोन आईडी expect_out (spawn_id) मा भण्डारण गरिएको छ।

टाइम टाइम फ्ल्यागले हालको अपेक्षित आदेश निम्न मानको प्रयोग गर्न को लागी टाइमआउट चरको मूल्यको सट्टामा टाइमआउटको रूपमा प्रयोग गर्दछ।

पूर्वनिर्धारित रूपमा, ढाँचाहरू हालको प्रक्रियाबाट आउटपुट विरुद्ध मिल्दो छन्, तथापि -i झण्डा नाम स्पोन_इड सूचीबाट आउटपुटको घोषणा गर्दछ जुन कुनै पनि निम्न ढाँचाहरू (अर्को -ई सम्म ) सँग मिल्ने हुन सक्छ। Spawn_id सूचीमा वा स्पेसस्पेस विभाजित सूची हुनुपर्छ स्पोन_ आईड्स वा स्पोन_आईडीहरूको यस्तो सूचीको चर चर।

उदाहरणका लागि, निम्न उदाहरण वर्तमान प्रक्रियाबाट "जोडिएको" को लागि पर्ख्छ, वा "व्यस्त", "असफल" वा "अवैध पासवर्ड" spawn_id बाट $ proc2 द्वारा नामित।

आशा -i $ proc2 busy {busys busy \ n; exp_continue} -रे "असफल | अवैध पासवर्ड" रद्द गर्नुहोस् टाइमआउट abort जोडिएको}

विश्वव्यापी चरको मान any_spawn_id प्रयोग गर्न सकिन्छ जुन कुनै spawn_ids मा ढाँचाहरूसँग प्रयोग गर्न सकिन्छ जुन सबै आशा -नामको साथमा नामहरू छन् जुन हालको अपेक्षा आदेशमा। A -i झण्डा बाट spawn_id कुनै सम्बन्धित प्याटर्नको साथ (जस्तै, अर्को- तुरुन्तै अर्को -ई द्वारा पछ्याइएको छ) कुनै पनि स्पेस आदेशमा कुनै_spawn_id सँग सम्बन्धित अन्य ढाँचाहरूमा उपलब्ध छ

द- फ्लैगले विश्वव्यापी चर नाम पनि समावेश गर्दछ जुन कुन स्पोन एड्सको सूचीको लागि चर पढ्न सकिन्छ। चर परिवर्तन हुन्छ जब यो परिवर्तन हुन्छ। यो आदेश कार्यान्वयनमा रहेको बेला I / O स्रोत परिवर्तन गर्ने तरिका प्रदान गर्दछ। स्पोन आइड्स प्रदान गरिएको यो तरिका "अप्रत्यक्ष" स्पोन आइडी भनिन्छ।

ब्रेकजारी राख्ने कार्यहरूको कारण नियन्त्रण संरचनाहरू (जस्तै, for , proc ) लाई सामान्य तरिकामा व्यवहार गर्न। आदेश exp_continue ले सामान्यतया के रूपमा फर्काउनु भन्दा सट्टा कार्यान्वयन जारी राख्न अनुमति दिन्छ।

यो स्पष्ट loops देखि बचने को लागि उपयोगी छ वा दोहोरो अपेक्षा बयान। Rlogin स्वचालित गर्न को लागी निम्न उदाहरण अंश को भाग हो। Exp_continue ले भने कि यदि रालिन पासवर्डको लागि संकेत गर्दछ भने दोस्रो आशा कथन (तत्कालै हेर्नको लागी) को लागी हुन सक्दछ।

आशा गर्नुहोस् {पासवर्ड: {stty -echo send_user "पासवर्ड ($ प्रयोगकर्ताको लागि $ होस्टमा) $ होस्ट:" expect_user -re "(। *) \ n" send_user "\ n" पठाउनुहोस् "$ expect_out (1, string) \ r" stty echo exp_continue} गलत {send_user "अवैध पासवर्ड वा खाता \ n" बाहिर निस्कनुहोस्} टाइमआउट {send_user "जडान होस्ट गर्नको लागि $ होस्ट समाप्त भएको छ \ n" बाहिर निस्कनुहोस् "पठाउनुहोस् \ send_user \" होस्टसँग जडान विफल: $ expect_out (बफर) "निस्कनुहोस्" - re $ prompt}

उदाहरणका लागि, निम्न टुक्राले प्रयोगकर्तालाई अन्तरक्रियात्मक अन्तरक्रिया गर्ने मार्गदर्शकलाई मद्दत गर्न सक्दछ जुन पहिले नै पूर्ण रूपमा स्वचालित छ। यस अवस्थामा, टर्मिनल कच्चा मोडमा राखिएको छ। यदि प्रयोगकर्ताले "+" थिच्दछ भने, एक चर बढेको छ। यदि "p" थिचिएको छ भने, धेरै रिटर्नहरू प्रक्रियामा पठाइन्छ, सायद केही तरिकामा यो पोक गर्न, र "म" प्रयोगकर्तालाई प्रक्रियासँग अन्तरक्रिया गर्न, प्रभावकारी रूपमा स्क्रिप्टबाट टाढा टाँस्नु। प्रत्येक अवस्थामा, exp_continue ले हालको कार्यान्वयन गरेपछि हालको प्रतिमा मिल्ने जारी राख्ने अनुमति दिन्छ।

ठुलो कच्ची-आशा आशा_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_after दुवै को मिलान गर्न सक्छन् भने अपेक्षा को पैटर्न प्रयोग गरिन्छ। अधिक जानकारीको लागि expect_before आदेश हेर्नुहोस्।

expect_background [expect_args]
उही तर्कहरू आशाको रूपमा लिन्छ, तर यो तुरुन्तै फर्काउँछ। जब नयाँ आगत आउँदछ तब ढाँचा परीक्षण गरिन्छ। ढाँचा समयसमाप्तिपूर्वनिर्धारित आशा_ब्याकभूमिको अर्थहीन हो र चुपचाप खारेज गरिएको छ। अन्यथा, expect_background कमाण्ड expect_beforeexpected_after मात्र आशा गर्दछ जस्तै ढाँचा प्रयोग गर्दछ।

जब expect_background कार्यहरू मूल्याङ्कन गरिएका छन्, त्यहि स्पोन आईडीको लागि पृष्ठभूमि प्रशोधन अवरुद्ध गरिएको छ। क्रिया पूरा भएपछि पृष्ठभूमि प्रक्रिया अनब्लक गरिएको छ। पृष्ठभूमि पृष्ठभूमि रोकिएको बेला, यो एक (अग्रभूमि) समान स्पोन आईडीमा अपेक्षा गर्न सम्भव छ।

अपेक्षित कार्यान्वयन गर्न सम्भव छैन सम्भव छ कि एक expect_background अनब्लक गरिएको छ। expect_background एक विशेष स्पोन आईडी को लागि एक नयाँ स्प्रिंग बैकफर्म को समान स्पोन आइडी को घोषणा गरेर हटाईयो। Expect_background घोषणा बिना कुनै ढाँचामा पृष्ठभूमिमा ढाँचाहरू मेल खाने क्षमताबाट दिएको स्पोन आईडी हटाउँदछ।

expect_before [expect_args]
उही तर्कहरू आशाको रूपमा लिन्छ, तर यो तुरुन्तै फर्काउँछ। हालैको expect_before बाट ढाँचा-क्रिया जोडीहरू एउटै स्पोन आईडीसँग कुनै पनि निम्न आशा आदेशहरूमा थपिएका छन्। यदि ढाँचा म्याचहरू भने, यदि यो आशा आदेशमा निर्दिष्ट गरिएको जस्तो व्यवहार गरिन्छ, र सम्बन्धित निकायलाई अपेक्षित आदेशको सन्दर्भमा क्रियान्वित गरिएको छ। यदि दुवै expect_before र को अपेक्षा मिल्दो हुन सक्छ को पैटर्न, expect_be पहिले ढाँचा प्रयोग गरिन्छ।

यदि कुनै ढाँचा निर्दिष्ट गरिएको छैन भने, स्पन आईडी कुनै पनि ढाँचाका लागि जाँच गरिएको छैन।

एक-झण्डा द्वारा ओभरराइड नगरेसम्म, अपेक्षा_पहिले पैटर्नहरू स्पेस आइडीको विरुद्धमा मेल खान्छ जुन अपेक्षित_पहिले आदेश निष्पादित गरिएको थियो (जब यो ढाँचा मेल खाँदैन)।

आईइनओफ झण्डाले आशा गर्दछ कि हालका निर्दिष्टताहरू कुन म्याचमा मेल खान्छ भनेर फर्काउन अघि । पूर्वनिर्धारित रूपमा, यो वर्तमान स्पोन आइडीमा रिपोर्ट गर्दछ। वैकल्पिक स्पोन आईडी निर्दिष्टीकरण स्पान आईडीमा जानकारीको लागि दिइएको हुन सक्छ। उदाहरणका लागि

expect_before -info -i $ proc

प्रायः एक स्पोन आईडी निर्दिष्टीकरण मा दिइएको हुन सक्छ। झण्डा -अन्तर्गत प्रत्यक्ष प्रत्यक्ष स्पन आइडीहरू रोक्छन् जुन केवल अप्रत्यक्ष निर्दिष्टीकरणहरूबाट आउँछ।

स्पन आईडी निर्दिष्टीकरणको सट्टा, फ्ल्याग "-all" ले सबै स्पोन आइडीहरू रिपोर्ट गर्न "-इन्फो" को कारण हुनेछ।

-इनफोफ झण्डाको आउटपुट आशा_र्नु पर्ने तर्कको रूपमा पुन: प्रयोग गर्न सकिन्छ।

expect_tty [expect_args]
आशाको जस्तै छ तर यसलाई क्यारेक्टर / dev / tty बाट (प्रयोगकर्ताबाट कीस्ट्रोकहरू) पढ्दछ। डिफल्ट रूपमा, पढाइ पकाएको मोडमा पढिएको छ। यसरी, रेखाहरू तिनीहरूलाई हेर्नको लागि पुन: फर्काउन अन्त्य हुन्छ। यो स्टिटी मार्फत बदल्न सकिन्छ (तल स्टिडिङ हेर्नुहोस्)।

expect_user [expect_args]
जस्तै आशा छ तर यो स्टिनिनबाट प्रयोगकर्ताहरू (यानी उपयोगकर्ताबाट कीस्ट्रोकक्सहरू) पढ्छ। डिफल्ट रूपमा, पढाइ पकाएको मोडमा पढिएको छ। यसरी, रेखाहरू तिनीहरूलाई हेर्नको लागि पुन: फर्काउन अन्त्य हुन्छ। यो स्टिटी मार्फत बदल्न सकिन्छ (तल स्टिडिङ हेर्नुहोस्)।

फोर्क
नयाँ प्रक्रिया सिर्जना गर्दछ। नयाँ प्रक्रिया वर्तमान अपेक्षा प्रक्रियाको सही प्रतिलिपि हो। सफलतामा, कांक नयाँ (बच्चा) प्रक्रियामा 0 फर्काउँछ र बाल प्रक्रियाको प्रक्रिया आईडी आमाबाबुको प्रक्रियामा फर्काउँछ। विफलता (वास्तवमा संसाधनहरूको कमीको कारणले गर्दा, स्पेस स्पेस, मेमोरी स्वाइप गर्नुहोस्), प्रोटोकल प्रक्रियामा फर्केर फर्काउँछ -1 र बाल प्रक्रिया सिर्जना गरिएको छैन।

फोकड प्रक्रियाहरू बाहिर निस्कने आदेशबाट बाहिर निस्किन्छ , जस्तै वास्तविक प्रक्रिया । फोकड प्रक्रियाहरू लग फाइलहरूमा लेख्न अनुमति दिईन्छ। यदि तपाई डिबगिङ वा अधिकांश प्रक्रियाहरूमा लगिङ असक्षम हुनुहुन्न भने, परिणाम भ्रमित हुन सक्छ।

केहि pty कार्यान्वयन धेरै पाठकहरु र लेखकों द्वारा भ्रामक हुन सक्छ, पनि क्षणिक रूप देखि। यसकारण, स्पाइडिंग प्रक्रियाहरू अगाडि राख्नु यो टाढाको सुरक्षित छ।

अन्तरक्रिया [string1 body1] ... [stringn [bodyn]]
प्रयोगकर्तालाई हालको प्रक्रिया नियन्त्रण गर्दछ, ताकि हालको प्रक्रियामा किस्टस्ट्रोक पठाइनेछ, र हालको प्रक्रियाको स्टडआउट र स्टर्डर फर्काइन्छ।

स्ट्रिङ-शरीर जोडीहरू तर्कको रूपमा निर्दिष्ट गर्न सकिन्छ, जसमा शरीरले क्रिस्ट गरिएको हो जुन सम्बन्धित स्ट्रिङ प्रविष्टि गरिन्छ। (पूर्वनिर्धारित रूपमा, स्ट्रिङ हालको प्रक्रियामा पठाइएको छैन।) यदि अन्तिम शरीर हराइरहेको छ भने व्याख्या आदेश आदेश गरिन्छ।

यदि सम्पूर्ण अन्तरक्रिया बयानमा तर्कहरू एक भन्दा बढी रेखाको आवश्यकता पर्दछ भने सबै तर्कहरू "braced" हुन सक्छ जसलाई प्रत्येक रेखालाई बन्द गर्नु पर्दछ। यो एक मामला मा, ब्रेसिज को बावजूद सामान्य Tcl प्रतिस्थापन हुनेछ।

उदाहरणका लागि, निम्न आदेशले निम्न string-body जोडाको साथ परिभाषित गर्दछ: जब ^ ^ Z थिचिएको छ, अपेक्षा निलम्बित गरिएको छ। (The -reset flag ले टर्मिनल मोडहरू पुनर्स्थापित गर्दछ।) जब ^ ए थिचिएको छ, प्रयोगकर्ताले "तपाईंले नियन्त्रण-ए टाइप गर्नुभयो" र प्रक्रियालाई ^ ^ ए पठाइयो। जब $ थिचिएको छ, प्रयोगकर्तालाई मिति हेर्दछ। जब ^ C थिचिएको छ, बाहिर निस्कन्छ। यदि "foo" प्रविष्टि गरिएको छ भने, प्रयोगकर्ताले "बार" देखाउँछ। जब थिचिएको छ, अपेक्षाको शब्दावलीले अन्तरक्रियात्मक रूपमा चलाउँछ।

CTRLZ \ 032 अन्तर्क्रिया गर्नुहोस् {-रेसेट $ CTRLZ {कार्य मार -StOP ​​[pid]} \ 001 {send_user "तपाईँले नियन्त्रण-ए टाइप गर्नुभयो \ n"; "\ 001"} $ {send_user "" मिति हो [घडी ढाँचा [घडी सेकेन्ड]]। "} \ 003 बाहिर निस्केको {send_user" bar "}}

String-body pairs मा, तारहरू क्रमबद्ध छन् जुन तिनीहरू तर्कका रूपमा सूचीबद्ध छन्। स्ट्राइङहरू आंशिक रूपमा मेल खाने बाँकी आउँदै गरेको अनुमानमा वर्तमान प्रक्रियामा पठाइएको छैन। यदि क्यारेक्टरहरू त्यसपछि प्रविष्टि गरिएको हो भने कि अब सम्भवतः कुनै मिलान हुन सक्दैन, केवल string को भाग प्रक्रियामा पठाइनेछ जुन सम्भवतः अर्को मिलान सुरु गर्न सक्दैन। यसैले, जो आंशिक म्याचहरु को substrings को तार पछि पछि मेल गर्न सक्छ, यदि मूल स्ट्रिंग जो म्याच मा विफल भयो विफल।

पूर्वनिर्धारित रूपमा, स्ट्रिंग मिलान कुनै जंगली कार्डहरूसँग सही छ। (यसको विपरीत, आशा आदेशले विश्वव्यापी रूपमा विश्वव्यापी रूपमा ढाँचा प्रयोग गर्दछ।) यस -ex फ्ल्यागले अन्यथा अन्तरक्रियात्मक झण्डाहरू मिलान गर्न सक्दछन् कि पैटर्नहरूको रक्षा गर्न प्रयोग गर्न सकिन्छ। "-" सँग सुरु हुने कुनै पनि प्याटर्न यस तरिकालाई सुरक्षित गरिनु पर्छ। ("" "को साथ सुरु हुने सबै स्ट्रिङ भविष्यका विकल्पहरूका लागि आरक्षित छन्।)

रे-फ्लैगले regexp-style pattern को रूपमा व्याख्या गर्न स्ट्रिंगलाई बलियो बनाउँछ। यस अवस्थामा, मिल्दो सबस्ट्रिंगहरू चर अन्तरक्रियामा भण्डार गरिएको छ जसमा आशा अपेक्षा गर्नको लागी चर expect_out मा यसको आउटपुट भण्डारण गर्दछ। दिशानिर्देश ध्वज समान रूपमा समर्थित छ।

ढाँचा ईफ अन्त्यको फाईलमा क्रियान्वित गरिएको एक क्रिया परिचय गर्दछ। एक अलग ईफ ढाँचाले आउटपुट फ्ल्याग पनि फेला पार्न सक्छ जसमा यो मिल्दो छ भने यदि आउटपुट लेख्दा ईईफ फेला पर्यो। पूर्वनिर्धारित ईफ क्रिया "रिटर्न" हो, त्यसैले त्यसो त अन्तरक्रियामा कुनै पनि EOF मा फर्किन्छ।

ढाँचा टाइमआउट एक समयसमाप्ति (सेकेन्डमा) र कार्यलाई दिइएको समयको लागि कुनै क्यारेक्टर पढ्न पछि क्रियान्वित गरिएको छ। टाइमआउट ढाँचा सबैभन्दा भर्खरै निर्दिष्ट गरिएको प्रक्रियामा लागू हुन्छ। त्यहाँ कुनै डिफल्ट टाइमआउट छैन। विशेष चर "टाइम आउट" ( अपेक्षित कमाण्ड द्वारा प्रयोग गरिएको) यस समयसमाप्तिमा कुनै असर छैन।

उदाहरणका लागि, निम्न कथन प्रयोगकर्ताहरूलाई स्वतः सङ्ग्रह गर्न प्रयोग गर्न सकिन्छ जसले एक घण्टाको लागि केहि टाइप गरेन तर तर जसले अझै पनि नियमित सन्देश सन्देशहरू प्राप्त गर्दछ:

अन्तरक्रिया --इन्प $ user_spawn_id समयसमाप्ति 3600 रिटर्न-आउटपुट \ $ spawn_id

यदि ढाँचा शब्दकुञ्जी रिक्त हो , र नोल्सलाई अनुमति दिइएको छ ( हटाउने हटाउनुहोस् हटाउनुहोस् ), यदि एक ASCII 0 सँग मिल्दो छ भने सम्बन्धित निकायलाई क्रियान्वित गरिएको छ। 0 बाइटहरू मेल खाने सम्भव छैन विश्वव्यापी वा regexp ढाँचा मार्फत।

झण्डाको साथ ढाँचा को पूर्वनिर्धारित तयारी गर्न को लागी चर अन्तरक्रिया_आउट (spawn_id) को स्प्यानमा सेट गर्न को लागी जो पैटर्न (वा इफ) सँग मेल खाने गर्दछ।

ब्रेकजारी राख्ने कार्यहरूको कारण नियन्त्रण संरचनाहरू (जस्तै, for , proc ) लाई सामान्य तरिकामा व्यवहार गर्न। तथापि रिटर्न कारणहरूले यसको कल्याणमा फर्कन अन्तरक्रिया गर्दछ, जबकि inter_return ले आफ्नो कल्याणमा फर्काउने कारणले अन्तरक्रिया गर्दछ। उदाहरणको लागि, यदि "proc foo" अन्तर्क्रिया भनिन्छ भने त्यसो गरेपछि क्रिया inter_return , proc foo फर्कनेछ। (यसको अर्थ हो भने यदि अन्तरक्रियामा कल गर्नुहोस् इन्टरप्राइटरले अन्तरक्रियात्मक टाइपिङ फिर्ती जारी राख्नको लागि अन्त गर्नेछ, जबकि inter_return यसले कुराकानीलाई फिर्ताको कलमा फर्कन सक्छ।)

अन्तरक्रियाको बेला, कच्चा मोड प्रयोग गरिन्छ ताकि हालको प्रक्रियामा सबै क्यारेक्टरहरू पारित हुन सक्छ। यदि हालको प्रक्रियाले नौकरी नियन्त्रण संकेतहरू समात्न गर्दैन भने, यदि रोकिएको संकेत पठाउँदछ भने (पूर्वनिर्धारित ^ Z) द्वारा। यसलाई पुन: सुरु गर्न, जारी सिग्नल पठाउनुहोस् (जस्तै "मारियो -CONT")। यदि तपाई साँच्चै SIGSTOP यस्तो प्रक्रियामा पठाउन चाहानुहुन्छ (^ Z द्वारा), पहिले स्पाइलिङ सीएआरलाई विचार गर्नुहोस् र त्यसपछि तपाईंको कार्यक्रम चलिरहेको छ। अर्कोतर्फ, यदि तपाईं आफैलाई अपेक्षा गर्न SIGSTOP पठाउन चाहानुहुन्छ भने, पहिलो कल इन्टरनेटर (सायद भाग्ने क्यारेक्टर प्रयोग गरी), र त्यसपछि ^ Z थिच्नुहोस्।

स्ट्रिङ-शरीर जोडेले शब्दावलीमा प्रवेश गर्नदेखि टाढाको रूपमा प्रयोग गर्न सकिन्छ र अन्तरक्रियात्मक आदेशहरू कार्यान्वयन गर्दछ। अघिल्लो टर्मिनल मोड प्रयोग गरिन्छ जब string-body जोडाको शरीर निष्पादित गरिएको छ।

गतिको लागि, कार्यहरू पूर्वनिर्धारित रूपमा कच्चा मोडमा कार्यान्वयन गर्दछ। रिसेट फ्यागमा टर्मिनलमा रिमोट रिसेट गर्दछ यो पहिलेको कुराकानी भएको थियो (अनियमित, पकाएको मोड)। ध्यान दिनुहोस् कि मोड हुँदा स्विच हुँदा क्यारेक्टरहरू हराउन सक्छ (केही प्रणालीहरूमा टर्मिनल चालकको दुर्भाग्यवश सुविधा)। प्रयोग गर्न को लागी एकमात्र कारण - रीसेट यदि तपाईंको कार्य पकाएको मोडमा चलिरहेको निर्भर गर्दछ।

दियो ध्वज अक्षरहरू पठाउँछ जसले निम्न ढाँचालाई प्रक्रियामा फर्काउँछ जुन तिनीहरूलाई सिर्जना गर्दछ प्रत्येक वर्ण पढ्नको रूपमा। यो उपयोगी हुन सक्छ जब प्रयोगकर्ताले आंशिक टाइप गरिएको ढाँचाबाट प्रतिक्रिया देख्न आवश्यक छ।

यदि ढाँचा गन भएको छ तर अन्तमा मेल खाँदैन भने क्यारेक्टरहरू प्राय: प्रक्रियामा पठाइन्छन्। यदि प्राय: प्रक्रियाले उनीहरूलाई उत्प्रेरित गर्छ भने, उपयोगकर्ताहरूले दुई पटक क्यारेक्टरहरू देख्नेछन्। -इकोच शायद त्यस्ता परिस्थितिमा उपयुक्त छ जहाँ प्रयोगकर्ताले ढाँचा पूरा गर्न सम्भव छैन। उदाहरणका लागि, निम्न उद्धरण rftp बाट, पुनरावर्ती-ftp लिपि, जहाँ प्रयोगकर्ताले ~ g, ~ p, वा ~ l प्रविष्ट गर्न, राख्न, वा हालको डाइरेक्टरीको पुन: सूचीबद्ध गर्न सूचीमा संकेत गर्दछ। यो सामान्य FTP आदेशबाट धेरै टाढा छन्, प्रयोगकर्ता गलत तरिकाले, कुनै पनि द्वारा टाइप गर्न को लागी सम्भावना छैन, कुन कुरामा, तिनीहरूले शायद परिणाम मात्र बेवास्ता गर्नेछन्।

अन्तरक्रिया गर्नुहोस्- -चको ~ जी {getcurdirectory 1} -चुन ~ l {getcurdirectory 0} -चेक ~ p {putcurdirectory}}

नोनोफर झण्डाले क्यारेक्टरहरू पठाउँदछ जुन उत्पादन प्रक्रियामा निम्न ढाँचासँग वर्णहरू क्यारेक्टरहरू पढ्दछन्।

यो उपयोगी छ जब तपाईं एक कार्यक्रमलाई ढाँचा फिर्ता गूंज गर्न चाहनुहुन्छ। उदाहरणका लागि, एक व्यक्ति डायलिंग (एक ह्यासे शैली शैली मोडेम) को निगरानी गर्न को लागी निम्नलिखित प्रयोग गर्न सकिन्छ। प्रत्येक समय "atd" देखापर्यो स्क्रिप्टले बाँकी लाइनलाई लगाउँछ।

proc lognumber {} {अन्तर्क्रिया -नबफेर -re "(। *) \ r" फिर्ती $ लग राख्छ "[घडी ढाँचा [घडी सेकेन्ड]]: $ interact_out (1, string)"} अन्तरक्रिया -नभोफर "atd" लगिनम्बर

अन्तरक्रियाको बेला, लग_सरको अघिल्लो प्रयोग उपेक्षा गरिएको छ। विशेष गरी, अन्तरक्रियाले यसको आउटपुट लग गर्न बलियो (मानक आउटपुटमा पठाइयो) किनभने यो प्रयोगकर्ताले अन्धो रूपमा अन्तरक्रिया गर्न चाहँदैनन्।

यो - फ्ल्यागले निम्न कुञ्जी-शरीर जोडीलाई हालको प्रक्रियाको आउटपुटमा लागू गर्नको कारण बनाउँछ। यो उपयोगी हुन सक्छ, उदाहरणका लागि, जब टेलिनेट सत्रको समयमा अवास्तविक क्यारेक्टरहरू पठाउने होस्टहरूसँग व्यवहार गर्दा।

पूर्वनिर्धारित रूपमा, अन्तरक्रियाले प्रयोगकर्तालाई स्टिनिन लेख्न र अपेक्षित प्रक्रियाको स्टडआउट पढ्ने अपेक्षा गर्दछ। यो-फ्ल्याग ("प्रयोगकर्ता" को लागि) प्रयोगकर्ताको लागि अन्तरक्रिया को रूप मा यसको तर्क द्वारा नामित प्रक्रिया को रूप मा (जो आईडी को स्पैनिश हुनु पर्छ) को रूप मा इंटरैक्ट देखो बनािन्छ।

यसले दुई सम्बद्ध प्रक्रियाहरूलाई स्पष्ट पाश प्रयोग नगरी एक साथ सामेल हुन अनुमति दिन्छ। डिबगिङमा सहायता गर्न, निदानको अपेक्षा गर्नाले सधैं स्टडरर जान्छ (वा निश्चित लगिङ र डिबगिङ जानकारीको लागि स्टडआउट)। एउटै कारणको लागि, व्याख्या आदेशले स्टिनिनबाट अन्तरक्रियात्मक रूपमा पढ्नेछ।

उदाहरणका लागि, निम्न अंशले लगइन प्रक्रिया सिर्जना गर्दछ। त्यसपछि यसले प्रयोगकर्ता (डायल गरिएको छैन) डायल गर्दछ, र अन्तमा दुई साथ जोड्दछ। निस्सन्देह, कुनै पनि प्रक्रिया लगइनको लागि प्रतिस्थापन हुन सक्छ। उदाहरणका लागि, प्रयोगकर्ताले पासवर्ड र खाता आपूर्ति बिना काम गर्न अनुमति दिन्छ।

लगइन लगइन लगइन $ spawn_id स्पोन टिप मोडेम # डायल आउट प्रयोगकर्तामा # जडान प्रयोगकर्ताको लागी interact -u $ लगइन लगइन गर्नुहोस्

बहुविध प्रक्रियाहरूमा आउटपुट पठाउनको लागि, आउटपुट फ्ल्याग द्वारा पूर्वनिर्धारित हरेक स्पोन आइडी सूची सूचीबद्ध गर्नुहोस्। उत्पादन स्पोन आइडहरूको समूहको लागि इनपुट एक -इनपुट ध्वज द्वारा पूर्वनिर्धारित स्पोन आईडी सूची द्वारा निर्धारित हुन सक्छ। (दुवै इनपुटआउटपुटले अपेक्षित आदेशमा -i झण्डाको रूपमा समान रूपमा लिस्टहरू लिन सक्छ, बाहेक कुनै_spawn_id अन्तर्क्रियामा सार्थक छैन।) सबै निम्न झण्डाहरू र स्ट्रिङहरू (वा ढाँचाहरू) अर्को सम्म यो इनपुटमा लागू हुन्छ - इनपुट झण्डा देखा पर्छ। यदि कुनै पनि इनपुट प्रकट हुन्छ भने, आउटपुट लागू हुन्छ "-$ user_spawn_id -putput"। (समान, ढाँचाहरूसँग छैन -इन्पप ।) यदि एक -इनपुट निर्दिष्ट गरिएको छ, यसले $ user_spawn_id ओवरराइड गर्दछ। यदि दोस्रो -गुण निर्दिष्ट गरिएको छ भने, यो $ spawn_id ओवरराइड गर्दछ। थप -आगत इनपुट झण्डाहरू निर्दिष्ट गर्न सकिन्छ।

दुई प्रविधि इन्पुटले पूर्वनिर्धारित प्रक्रियाहरू $ spawn_id र $ user_spawn_id (रिवर्समा) रूपमा निर्दिष्ट गर्दछ। यदि एक -इनपुट झण्डा बिना- आउटपुट ध्वजको साथ देखिन्छ, त्यस प्रक्रियाबाट क्यारेक्टरहरू खारेज गरिएका छन्।

यस फाईलले वर्तमान spawn_id को लागि प्रतिस्थापन परिचय गर्दछ जब कुनै अन्य- इनपुट वा झण्डाहरू प्रयोग गरिन्छ। A -i झण्डाले एक -o झण्डा अनुरुप गर्दछ।

अप्रत्यक्ष स्पोन आइडहरू प्रयोग गरेर अन्तरक्रिया गर्ने प्रक्रियाहरू परिवर्तन गर्न सम्भव छ। (अप्रत्यक्ष स्पन आइडहरू आशा आदेशमा खण्डमा वर्णन गरिएको छ।) अप्रत्यक्ष स्पोन आइडीहरू -i, -u, -put, वा-आउटपुट झण्डाहरूसँग निर्दिष्ट गर्न सकिन्छ।

व्याख्या [args]
प्रयोगकर्तालाई अन्तरक्रियात्मक रूपमा आशा र Tcl आदेशका लागि प्रोत्साहित गर्दछ। प्रत्येक आदेशको परिणाम छापिएको छ।

ब्रेकजारी राख्ने कार्यहरूको कारण नियन्त्रण संरचनाहरू (जस्तै, for , proc ) लाई सामान्य तरिकामा व्यवहार गर्न। तथापि फिर्तीले आफ्नो कल्याणमा फर्काउनका लागि इन्टरनेटरको कारण हुन्छ, जबकि inter_return ले आफ्नो कल्याणमा फर्काउनको लागि इन्टरनेटरको कारण दिन्छ। उदाहरणको लागि, यदि "proc foo" इन्टरनेटर भनिन्छ, जसले त्यसो गरेपछि क्रिया inter_return , proc foo फर्कनेछ। कुनै पनि अन्य आदेशले नयाँ आदेशहरूको लागि प्रम्प्टिंग जारी राख्न को लागि अनुवादक को कारण बनाउँछ।

पूर्वनिर्धारित रूपमा, चाँडोमा दुई इनटेकर्सहरू छन्। पहिलो पूर्णांक मूल्यांकन स्ट्याकको गहिरो वर्णन गर्दछ (यानी, कति पटक Tcl_Eval भनिन्छ)। दोस्रो पूर्णांक Tcl इतिहास पहिचानकर्ता हो। प्रोप्ट "प्रोप्ट 1" भनिन्छ जसको फिर्ती मान अर्को प्रम्प्ट हुन्छ भन्ने परिभाषित गरेर सेट गर्न सकिन्छ। यदि एक कथन छ खुला उद्धरण, परेन्स, ब्रेसिज, वा कोष्ठकहरू, एक माध्यमिक प्रम्प्ट (पूर्वनिर्धारित रूपमा "+>") लाई नयाँलाइनमा जारी गरिएको छ। माध्यमिक प्रम्प्ट "प्रोम्प्ट 2" नामक प्रक्रिया परिभाषित गरेर सेट गर्न सकिन्छ।

शब्दावली को समयमा, पकाएको मोड प्रयोग गरिन्छ, भले यो कलर कच्ची मोड प्रयोग गरिरहेको थियो।

यदि स्टिनिन बन्द छ भने, अनुवादक फर्केर आउनेछ जब -अफ झण्डा प्रयोग गरिन्छ, कुन मामलामा पछिल्ला बहस बोकेको छ।

लग_फाइल [args] [[ए] फाइल]
यदि फाइलनाम प्रदान गरिएको छ भने, लग_फाइल फाइलमा सत्र (त्यस बिंदुमा सुरु) को ट्रान्सक्रिप्ट रेकर्ड गर्नेछ। लग_फाइल कुनै तर्क दिएको छैन भने रेकर्डिङ रोक्न हुनेछ। कुनै अघिल्लो लग फाइल बन्द छ।

फाइलनामको सट्टामा, एक Tcl फाइल पहिचानकर्ता- खोल्न वा -भीभोक्स झण्डाहरू प्रयोग गरेर प्रदान गर्न सकिन्छ। यो स्पोन कमान्ड जस्तै छ। (थप जानकारीको लागि स्पोन हेर्नुहोस्।)

-a झण्डा फोर्सहरू लग आउट गर्न लगाइयो जुन लग_सर्भर आदेश द्वारा दबाइयो।

पूर्वनिर्धारित रूपमा, log_file आदेश तिनीहरूलाई रद्द गर्न सट्टा पुरानो फाईलहरूमा लगाउँदछ , सुविधाको लागि लगइन अफ र धेरै पटक एक सत्रमा सक्षम गर्न सक्षम। फाईलहरू ट्रंक गर्नका लागि, -noappend flag प्रयोग गर्नुहोस्।

Theinfo flag ले लगाइएका हालको गैर-जानकारी तर्कहरूको विवरण फर्काउन log_file को कारण बनाउँछ।

log_user -info | 0 | 1
पूर्वनिर्धारित रूपमा, स्टडआउटमा संवाद पठाउने / आशा लगाउँदछ (र खुला यदि लगफाइल)। स्टडआउटमा लगिङ आदेश "लग_सर्भर 0" द्वारा असक्षम गरिएको छ र "लग_सर्भर 1" द्वारा पुन: सक्षम गरिएको छ। लगफाइलमा लगिङ अपरिवर्तित छ।

इन -इन फ्ल्यागले लग_सर्भरलाई हालैको गैर-जानकारी तर्क प्रदान गर्ने विवरण फर्काउनको कारण दिन्छ।

match_max [-d] [-i spawn_id] [आकार]
बफरको आकार परिभाषित गर्दछ (बाइट्समा) प्रयोग गरी आन्तरिक रूपमा प्रयोग गरियो। कुनै आकार आर्गुमेन्टको साथ, हालको आकार फर्काइएको छ।

-d झण्डा संग, पूर्वनिर्धारित आकार सेट गरिएको छ। (शुरुआती पूर्वनिर्धारित 2000 हो।) -इ- फ्ल्यागको साथ, नामको नाम स्पोन आईडीको लागि सेट गरिएको छ, अन्यथा यो हालको प्रक्रियाको लागि सेट गरिएको छ।

ओभरले [- # spawn_id] [- # spawn_id] [...] कार्यक्रम [args]
वर्तमान अपेक्षा कार्यक्रमको स्थानमा "कार्यक्रम तर्क" कार्यान्वयन गर्दछ, जुन समाप्त हुन्छ। एउटा नंगे हाइफन तर्कले आदेश नामको सामने हाइफनलाई बलियो बनाउँछ जस्तै यो लगइन शेल थियो। सबै spawn_ids बन्द भएका छन् ती बाहेक जुन तर्कहरूको रूपमा नाम दिइएको छ। यी नामहरू फाइल पहिचानकर्ताहरूमा म्याप गरिएको छ।

Spawn_ids अभिभावकहरूलाई नयाँ कार्यक्रमको लागि प्राप्त गर्न मैप गरिएको छ। उदाहरणको लागि, निम्न रेखा शतरंज चलाउँछ र यसलाई हालको प्रक्रियाद्वारा नियन्त्रित गर्न अनुमति दिन्छ - एक शतरंज मालिक भन्नुहोस्।

ओभरले -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id शतरंज

यो "अन्तरक्रिया -u" भन्दा बढी प्रभावकारी छ, तथापि, यसले प्रोग्राम गरिएको अन्तरक्रिया गर्ने क्षमतालाई बलिदान गर्दछ किनभने अपेक्षित प्रक्रिया अब नियन्त्रणमा छैन।

ध्यान दिनुहोस् कि कुनै टर्मिनल नियन्त्रण प्रदान गरिएको छैन। यस प्रकार, यदि तपाईं मानक इनपुट विच्छेदन वा रिमाप गर्नुहुन्छ, कार्य नियन्त्रण गर्ने प्रोग्रामहरू (गोलाहरू, लगइन, आदि) उपयुक्त तरिकाले कार्य गर्दैन।

समानता [-d] [-i spawn_id] [value]
परिभाषित गर्दछ कि समता संरक्षित हुनु पर्छ वा प्राय: प्रक्रियाहरु को आउटपुट बाट हटाइयो। यदि मान शून्य हो भने, समानता हटाइयो, अन्यथा यो स्ट्रिङ छैन। कुनै मान तर्कको साथ, हालको मान फर्काइएको छ।

-d झण्डा संग, पूर्वनिर्धारित समानता मान सेट गरिएको छ। (प्रारम्भिक पूर्वनिर्धारित 1 हो, अर्थात, समानता हटाइयो।) -i झण्डाको साथ, समानता नाम नामको स्पोन आईडीको लागि सेट गरिएको छ, अन्यथा यो हालको प्रक्रियाको लागि सेट गरिएको छ।

remove_nulls [-d] [-i spawn_id] [value]
परिभाषित गर्दछ कि क्या नलहरू राखिएका छन् वा स्प्रे भएका प्रक्रियाहरूको आउटपुटबाट हटाइन्छ पहिले ढाँचा मिल्दो वा भण्डार गर्दा अपेक्षित expect_out वा interact_out । यदि मान 1 हो, नोल्स हटाइयो। यदि मूल्य 0 हो भने, नोल्स हटाइएन। कुनै मान तर्कको साथ, हालको मान फर्काइएको छ।

-d झण्डा संग, पूर्वनिर्धारित मान सेट गरिएको छ। (प्रारम्भिक पूर्वनिर्धारित 1 हो, यानी, नोल्स हटाइयो।) -इ- फ्ल्यागको साथ, नामलाई स्पोन आईडीको लागि सेट गरिएको छ, अन्यथा यो हालको प्रक्रियाको लागि सेट गरिएको छ।

यदि नलहरू हटाइएका छन् वा होइन भने, रिक्त बाइटहरू लग र स्टडआउटमा रेकर्ड गर्नेछ।

पठाउनुहोस् [-फ्ल्यागहरू] string
हालको प्रक्रियामा स्ट्रिङ पठाउँछ। उदाहरणका लागि, आदेश

"नमस्ते संसार \ r" पठाउनुहोस्

हालको प्रक्रियामा वर्णहरू, helloworld पठाउँदछ। (Tcl मा प्रिन्टफ -जस्तो कमांड ( ढाँचा भनिन्छ) जुन मनपर्दो जटिल स्ट्रिंग बनाउन सक्छ।)

क्यारेक्टरहरू फर्काउँदा पठाइएपछि यद्यपि लाइन-बफर गरिएको इनपुटको साथमा कार्यक्रमहरूले क्यारेक्टरहरू पढ्ने छैनन्। फिर्ती क्यारेक्टर "\ r" अस्वीकृत गरिएको छ।

फ्ल्यागले अर्को तर्कलाई झण्डा भन्दा एक स्ट्रिंगको रूपमा व्याख्या गर्न बलियो गर्दछ। कुनै पनि स्ट्रिंग "-" द्वारा पूर्वनिर्धारित हुन सक्छ वा चाहे वास्तवमा एक झण्डा जस्तो देखिन्छ। यसले असुरक्षित झण्डाहरू जस्तो देखिन्छ जस्तो ट्रिप अप गर्न चर तार निर्दिष्ट गर्न एक विश्वसनीय तंत्र प्रदान गर्दछ। ("" "को साथ सुरु हुने सबै स्ट्रिङ भविष्यका विकल्पहरूका लागि आरक्षित छन्।)

-i झण्डाले घोषणा गर्दछ कि स्ट्रिङ नाम spawn_id मा पठाइयो। यदि spawn_id user_spawn_id हो, र टर्मिनल कच्ची मोडमा छ भने, स्ट्रिङमा नयाँलाइनहरू फिर्ती-नवलाइन अनुक्रममा अनुवाद गरिएको छ ताकि तिनीहरू देखा पर्दछ कि टर्मिनल पकाएको मोडमा थियो। उल्टो झण्डा यो अनुवादलाई अक्षम बनाउँछ।

अनावश्यक झण्डा रिक्त वर्णहरू (0 बाइट्स) पठाउँदछ। पूर्वनिर्धारित रूपमा, एक छोरो पठाइएको छ। एक पूर्णांकले नललाई पछ्याउन सक्छ कसरी संकेत गर्नका लागि कसरी धेरै नलहरू पठाउन सक्छ।

द- रोक झण्डाले ब्रेक अवस्था उत्पन्न गर्दछ। यो मात्र अर्थ बनाउँछ यदि स्पोन आईडी "tawn-open" मार्फत खोलिएको टिटी यन्त्रलाई बुझाउँछ। यदि तपाइँले टिप जस्तै प्रक्रिया प्रक्रिया गर्नुभयो भने, तपाईंले ब्रेक उत्पन्न गर्न टिप कन्वेंशन प्रयोग गर्नुपर्छ।

एस- फ्ल्याग बलहरू आउटपुट "ढिलो" पठाइनेछ, यसैले सामान्य स्थितिबाट टाढा छ जहाँ कम्प्युटरले इनपुट बफरलाई मानवको लागि डिजाइन गरिएको थियो जसले कहिल्यै बफरलाई कहिल्यै टाइप गर्दैन। यो निर्गत चर "send_slow" को मान द्वारा नियंत्रित गरिएको छ जुन दुई तत्त्व सूची लिन्छ। पहिलो तत्त्व एक पूर्णांक हो जुन बाइट्स को संख्या लाई परमाणु रूपमा पठाउन को वर्णन गर्दछ। दोस्रो तत्त्व एक वास्तविक संख्या हो जुन ईणिक पठाउनेहरू विभाजन गर्नुपर्छ जसको सेकेन्डहरूको संख्या वर्णन गर्दछ। उदाहरणका लागि, "send_slow {10 .001}" सेट गर्नुहोस् "पठाउनुहोस्" पठाउनुहोस्-s "लाई 1 मिलिसेकेन्डसँग प्रत्येक 10 क्यारेक्टरहरू पठाइयो।

-h झण्डा बलहरू आउटपुट पठाउन (केही हप्ता) मानव रूपमा वास्तवमा टाइप गर्दै। क्यारेक्टरहरूबीच मानव-जस्तो ढिलाइ देखा पर्दछ। (एल्गोरिथ्म एक Weibull वितरणमा आधारित छ, यो विशेष अनुप्रयोग सट्टा गर्न परिमार्जित संग।) यो निर्गत चर "send_human" को मान द्वारा नियन्त्रण गरिन्छ जुन पाँच तत्व सूची लिन्छ। पहिलो दुई तत्त्वहरू क्यारेक्टरहरूको औसत इन्टरभेरिभल समय सेकेण्डमा हुन्छ। पहिलो पूर्वनिर्धारितद्वारा प्रयोग गरिन्छ। दोस्रो शब्द समाप्तिमा प्रयोग गरिन्छ, कहिलेकाहीँ यस्ता ट्राफिकेशनहरूमा सूक्ष्म रोकिएको अनुकरण गर्नुहोस्। तेस्रो प्यारामिटर विचलन को एक उपाय हो जहाँ .1 काफी चर हो, 1 उचित रूप देखि चरनीय छ, र 10 धेरै अदृश्य छ। चरमहरू 0 अनन्तमा छन्। अन्तिम दुई प्यारामिटरहरू क्रमशः, न्यूनतम र अधिकतम अन्तरक्रियात्मक समय हुन्। अन्तिम र अधिकतम अन्तिम र "क्लिप" अन्तिम समय प्रयोग गरिन्छ। अंतिम औसत दिइएको औसतबाट धेरै फरक हुन सक्छ यदि न्यूनतम र अधिकतम क्लिप पर्याप्त मानहरू।

उदाहरणको रूपमा, निम्न आदेशले छिटो र लगातार टाइप टाइपलाई पराजित गर्दछ:

send_human सेट गर्नुहोस् {.1 .3 1 .05 2} send -h "म भोकाएको छु। चलो खाना खान दिनुहोस्।"

जबकि निम्न होस्टभर पछि निम्न उपयुक्त हुन सक्छ:

set_human सेट गर्नुहोस् {.4 .4 .2 .5 100} send -h "Goodd party lash night!"

याद गर्नुहोस् कि त्रुटिहरू सिमुलेशन छैनन्, यद्यपि तपाईं त्रुटि सुधार परिस्थितिहरू आफैलाई परिस्थितीमा पठाउने गल्तीमा सुधार र सुधार गर्न सक्नुहुनेछ।

ब्रेकहरू पठाउनको लागि, खाली अक्षरहरू पठाउनका लागि झण्डाहरू, ढिलो आउटपुटको लागि र मानव-शैलीको आउटपुटको लागि पारस्परिक रूपमा अनन्य रूपमा। अन्तिम निर्दिष्ट मात्र प्रयोग गरिनेछ। यसबाहेक, कुनै पनि स्ट्रिङ तर्कलाई झण्डाहरू वा ब्रेकहरू पठाउन झण्डाहरूसँग निर्दिष्ट गर्न सकिँदैन।

यो एक राम्रो विचार हो जुन पहिलो प्रकृयाको अपेक्षालाई एक अपेक्षा गरेर पठाउनुहोस्आशा गर्न को लागी प्रक्रिया को लागी इंतजार गर्नेछ, पठाउन सकिँदैन। विशेष गरी, यदि प्रक्रिया पठाउनु अघि पहिलो पठाउनु भयो भने, तपाईले तपाइँको डाटालाई बेवास्ता गरेको खतरालाई चलाउनुहुन्छ। अवस्थाहरूमा जहाँ अन्तरक्रियात्मक कार्यक्रमहरू कुनै प्रारम्भिक प्रम्प्ट प्रदान गर्दैन, तपाइँ पूर्वनिर्धारित रूपमा पठाउन सक्नुहुनेछ:

# कसरी कसरी ब्रेक गर्न ह्याकर संकेतहरू रोक्न, # यो प्रणालीले बाह्य पासवर्डको लागि प्रम्प्ट गर्दैन। # Spawn telnet very.secure.gov सुरू गर्न कार्यान्वयनका लागि 5 सेकेन्ड पर्खनुहोस् 5 पासवर्ड पठाउनुहोस् \ r

exp_send पठाउनको लागि एक उपनाम हो यदि तपाईंले एक्सकेककिट वा Tk वातावरणमा आशाको केहि अन्य प्रकार प्रयोग गर्दै हुनुहुन्छ भने, Tk द्वारा पूर्ण रूपमा फरक उद्देश्यका लागि परिभाषित गरिएको छ। exp_send वातावरण को बीच अनुकूलता को लागि प्रदान गरिएको छ। समान आशाहरू अन्य अपेक्षाको अन्य पठाउने आदेशहरूको लागि प्रदान गरिएको छ।

send_error [-flags] string
जस्तै छ, बाहेक यो उत्पादन हालको प्रक्रिया भन्दा सट्टा स्ट्रिडरमा पठाइएको छ।

send_log [-] string
पठाउनु जस्तो छ, बाहेक यो स्ट्रिङ लग फाइलमा मात्र पठाइएको छ ( log_file हेर्नुहोस्।) लगइन फाइल खुला छैन भने तर्कहरूलाई बेवास्ता गरिन्छ।

send_tty [-flags] string
जस्तै छ, बाहेक यो उत्पादन वर्तमान प्रक्रिया भन्दा बरु / dev / tty लाई पठाइएको छ।

send_user [-फ्ल्यागहरू] स्ट्रिङ
जस्तै छ, बाहेक यो उत्पादन वर्तमान प्रक्रियाको तुलनामा स्टडआउटमा पठाईएको छ।

सुन्दरी सेकेन्ड
लिपिलाई दिइएको सेकेन्डको लागि सुत्न सक्छ। सेकेण्ड एक दशमलव संख्या हुन सक्छ। अवरोधहरू (र Tk घटनाहरू यदि तपाइँ Expectk प्रयोग गरिरहनु भएको छ) सुरू अपेक्षा गर्दा प्रशोधन गरिन्छ।

spawn [args] कार्यक्रम [args]
"प्रोग्राम तर्क" चलाउने नयाँ प्रक्रिया सिर्जना गर्दछ। यसको स्टिनिन, स्टडआउट र स्टर्डर अपेक्षामा जोडिएको छ, ताकि तिनीहरू पढ्न र अन्य आशा आदेशहरू द्वारा लिखित हुन सक्छ। यो जडान बन्द भएको छ वा यदि प्रक्रियाले फाइल पहिचानकर्ताहरूको कुनै पनि बन्द गर्दछ।

जब एक प्रक्रिया स्पानद्वारा सुरू भएको छ, चर spawn_id यो वर्णको सन्दर्भमा वर्णनकर्ता सेट गरिएको छ। Spawn_id द्वारा वर्णन गरिएको प्रक्रियालाई " वर्तमान प्रक्रिया " मानिन्छ। spawn_id पढ्न वा लिखित हुन सक्छ, प्रभावी रूपमा कार्य नियन्त्रण प्रदान गर्दछ।

user_spawn_id एक descriptor समावेश गर्दछ जो एक वैश्विक चर हो जो प्रयोगकर्ता को संदर्भित गर्दछ। उदाहरणको लागि, जब spawn_id लाई यो मानमा सेट गरिन्छ, expect_user जस्तै व्यवहार गर्दछ।

Error_spawn_id descriptor युक्त एक वैश्विक चर हो जो मानक त्रुटि को संदर्भित गर्दछ। उदाहरणको लागि, जब स्पोन_इडलाई यो मानमा सेट गरिएको छ, send_error जस्ता व्यवहारहरू पठाउनुहोस्

tty_spawn_id एक descriptor सहित एक वैश्विक चर हो जो जो / dev / tty लाई बुझाउँछ। यदि / dev / tty अवस्थित छैन (जस्तै क्रोन, वा, वा ब्याच स्क्रिप्टमा), त्यसपछि tty_spawn_id परिभाषित गरिएको छैन। यो निम्नको रूपमा परीक्षण हुन सक्छ:

यदि {[जानकारी vars tty_spawn_id]} {# / dev / tty अवस्थित छ} र {# / dev / tty अवस्थित छैन # शायद क्रोम, ब्याच वा स्क्रिप्टमा}

spawn UNIX प्रक्रिया आईडी फर्काउँछ। यदि कुनै प्रक्रिया प्रायोजित छैन भने 0 फर्काइएको छ। चर spawn_out (दास, नाम) pty दास यन्त्रको नाममा सेट गरिएको छ।

पूर्वनिर्धारित रूपमा, स्पन आदेश नाम र तर्कहरूलाई सँघाउँछ। योनिको ध्वज यो गर्नबाट स्पन रोक्छ।

द्रुत प्रक्रियामा पुन: निर्देशित गर्न को- वान्ड फ्ल्याग कन्सोल आउटपुटको कारण हुन्छ। यो सबै प्रणालीहरूमा समर्थित छैन।

आन्तरिक, स्पोनले pty प्रयोग गर्दछ, प्रयोगकर्ताको टिटीको रूपमा प्रारम्भ गर्यो। यो थप प्रारम्भ गरिएको छ ताकि सबै सेटिङहरू "साईन" हो (स्टिटि (1) अनुसार। यदि चर stty_init परिभाषित गरिएको छ भने, यसलाई स्टटी तर्कको शैलीमा थप कन्फिगरेसनको रूपमा व्याख्या गरिएको छ। उदाहरणको लागि, "stty_init raw" सेट गर्नुहोस् थप स्पन प्रक्रियाहरूको टर्मिनलहरू कच्चा मोडमा सुरू गर्न। -नोटीपीकोपी प्रयोगकर्ताको टिटीको आधारमा प्रारम्भिकिकरण खोल्छ-Nottyinit "सफा" सुरुवात छोड्छ।

सामान्य रूपमा, स्पन कार्यान्वयन गर्न सानो समय लाग्छ। यदि तपाईले एक महत्त्वपूर्ण समय लिन स्पनलाई ध्यान दिनुहुन्छ भने, सम्भवतया पेटीहरू सामना गरीरहेको छ। धेरै परीक्षणहरू pty हरूमा चल्नका लागि एवरेन्ट प्रक्रियाहरूको साथमा प्रवेश गर्नबाट बचाउन सकिन्छ। (यी 10 सेकेन्ड प्रति विचाराधित pty ले।) डी डी संग चलिरहेको अपेक्षा देखाउनेछ भने यदि अजीब राज्यहरूमा धेरै pty हरूको अपेक्षा हो। यदि तपाइँले यी pty हरू जोडिएको प्रक्रियाहरू मार्न सक्नुहुन्न भने, तपाइँको मात्र पुन: बुँदा रिबुट हुन सक्छ।

यदि कार्यक्रम सफलतापूर्वक प्रायोजित गर्न सकिँदैन किनभने कार्यान्वयन (2) विफल हुन्छ (उदाहरणका लागि जब कार्यक्रम अवस्थित छैन), त्रुटि सन्देश अर्को अन्तरक्रियामा फर्काइनेछ वा अपेक्षित आदेश अनुसार यदि प्रोग्रामले आउटपुटको रूपमा त्रुटि सन्देश चलाउन र उत्पादन गरेको थियो। यो व्यवहार स्पोनको कार्यान्वयनको प्राकृतिक परिणाम हो। आन्तरिक, स्पन फोर्कहरू, पछि स्पाईड प्रक्रियाले स्पेस_इड मार्फत संचारको बाहेक मूल अपेक्षा प्रक्रियासँग कुराकानी गर्ने कुनै तरिका छैन।

द- खुल्ला फ्ल्यागले अर्को तर्कलाई Tcl फाइल पहिचानकर्ताको रूपमा व्याख्या गर्नको कारण बनाउँछ (जस्तै, खुलाबाट फर्काइएको छ।) स्पोन आइडी तब प्रयोग गर्न सकिन्छ जस्तै यो एक प्रायः प्रक्रिया थियो । (फाईल परिचयकर्ता अब प्रयोग गर्न सकिँदैन।) यसले तपाईंलाई pty प्रयोग नगरी स्पुरेड गरिएका प्रक्रियाहरूको रूपमा कच्चा यन्त्रहरू, फाइलहरू, र पाइपलाइनहरूको उपचार गर्न दिन्छ। 0 कुनै पनि सम्बन्धित प्रक्रिया छैन संकेत गर्न फर्काइएको छ। जब प्रायोजित प्रक्रियासँग जडान बन्द छ, त्यसैले Tcl फाइल पहिचानकर्ता हो। -भीभोइन फ्ल्याग समान- खोल्ने जस्तो छ - बाहेक यो किभोपनले स्प्यान आइडी बन्द भएपछि पनि फाइल परिचयकर्तालाई खुला छोड्न सकिन्छ।

खाली झण्डा खोल्नुको कारण pty को लागी तर कुनै प्रक्रियाले स्पेस गरेन। 0 कुनै पनि सम्बन्धित प्रक्रिया छैन संकेत गर्न फर्काइएको छ। Spawn_id सामान्य रूपमा सेट गरिएको छ।

चर spawn_out (दास, एफडी) pty दाससँग सम्बन्धित फाइल परिचयकर्तामा सेट गरिएको छ। यो "बन्द-बचत" प्रयोग गरेर बन्द गर्न सकिन्छ।

द्रुत प्रक्रियामा बेवास्ता गर्न साइन-इनको फ्ल्याग एक सिग्नल नाम। अन्यथा, संकेतहरूले पूर्वनिर्धारित व्यवहार प्राप्त गर्दछ। सिग्नलहरू जाल आदेशको रूपमा नामित छन्, बाहेक प्रत्येक संकेतलाई फरक झण्डा चाहिन्छ।

स्तर कष्ट
क्रियान्वित गर्नु अघि प्रिन्ट गर्न निम्न बयानहरू उत्पन्न गर्दछ। (Tcl को ट्रेस कमाण्ड ट्रेस चरहरू।) स्तरले कसरी संकेत गर्दछ कि कल स्ट्याकमा ट्रेस गर्न कसरी टाढा छ। उदाहरण को लागी, निम्न आदेश कल 4 को पहिलो चरणहरू ट्र्याक गर्दै अपेक्षा गर्दछ, तर यो तल कुनै पनि छैन।

expect -c "strace 4" script.exp

Theinfo flag ले हालैका गैर-जानकारी तर्कहरू को विवरण फिर्ता गर्न स्ट्रेसको कारण दिन्छ।

stty args
बाह्य स्टटी आदेशमा टर्मिनल मोडहरू समान रूपमा परिवर्तन गर्दछ।

पूर्वनिर्धारित रूपमा, नियन्त्रण टर्मिनल पहुँच छ। अन्य टर्मिनलहरू "आदेशको परिणामको रूपमा स्थितिको पुन: फर्काउने अनुरोधहरू" बाट पहुँच गर्न सकिन्छ। यदि कुनै स्थिति अनुरोध गरिएको छैन र नियन्त्रण टर्मिनलमा पहुँच गरिन्छ, कच्चा र गूंज विशेषताहरूको अघिल्लो स्थिति एक पछि फर्काउँछ जुन पछि हुन सक्छ। आदेश द्वारा प्रयोग गरिएको।

उदाहरणको लागि, कच्चा वा कोखले टर्मिनल कच्चा मोडमा राख्यो। तर्क वा पकाएको टर्मिनल पकाएको मोडमा राखियो। तर्कहरू गजल र क्रमशः टर्मिनल गूंज र नोईओच मोडमा राख्नुहोस्।

निम्न उदाहरणले कसरी अस्थायी रूपमा गूंज गर्न असक्षम गर्दछ। यो अन्यथा स्वचालित-लिपिहरूमा प्रयोग गर्न सकिँदैन जुन तिनीहरूलाई पासवर्डहरू सम्मिलित गर्नबाट बचाउन सकिन्छ। (यसका बारे थप छलफल हेर्नुहोस् EXPECT HINTS तल।)

stty -echo send_user "पासवर्ड:" expect_user -re "(। *) \ n" पासवर्ड सेट गर्नुहोस् $ expect_out (1, स्ट्रिङ) स्टटी गूंज

प्रणाली args
आर्ग्सलाई (1) आगतको रूपमा प्रदान गर्दछ, जस्तै टर्मिनलबाट यो कमान्डको रूपमा टाइप गरिएको थियो। शेल बन्द हुन्छ सम्म पर्ख्छ। Sh बाट फिर्ती स्थिति त्यहि तरिका संभाला छ जसको कार्यान्वयनले तपाईको फिर्ती स्थिति ह्यान्डल गर्दछ।

स्क्रिप्टमा स्टिनडाइड र स्टडआउट पुन: निर्देशित गर्न यसको विपरीत, प्रणालीले कुनै पुनःनिर्देशन गर्दछ (जुन स्ट्रिंगले संकेत दिएको छ)। यसकारण, कार्यक्रमहरू प्रयोग गर्न सम्भव छ जुन प्रत्यक्ष / dev / tty मा कुरा गर्न अनिवार्य छ। एउटै कारणको लागि, प्रणालीको नतिजा लगमा लगाइएको छैन।

टाइमस्ट्याम्प [args]
टाइमस्ट्याम्प फर्काउँछ। कुनै आर्गुमेन्टको साथ, एपोक फर्के पछि सेकेण्डको संख्या फर्काइएको छ।

-अफर्म ध्वज एक स्ट्रिंग जो फर्काइएको छ, तर स्ट्राइफाइमको लागि POSIX नियमहरू अनुसार बनाएको प्रतिस्थापनको साथ। उदाहरणका लागि% एक संक्षिप्त हप्ताको दिन (यानी, शनि) द्वारा प्रतिस्थापित गरिएको छ। अन्यहरू:

% एक संक्षिप्त सप्ताहको दिन% A पूर्ण हप्ताको दिन% B संक्षिप्त महिनाको नाम% B पूरा महिनाको नाम% C मिति-समयमा: बुधबार अक्टोबर 6 11:45:56 1993% महिनाको महिना (01-31% एच घण्टा (00-23)% आई घण्टा (01-12)% जे दिन (001-366)% m महिना (01-12)% एम मिनेट (00-5 9)% पी वा pm% S सेकेण्ड (00-61) % u दिन (1-7, सोमवार हप्ताको पहिलो दिन हो)% यू हप्ता (00-53, पहिलो आइतबार हप्ताको पहिलो दिन हो)% V हप्ता (01-53, आईएसओ 8601 शैली)% w दिन (0- 6)% W हप्ता (00-53, पहिलो सोमबार हप्ताको पहिलो दिन हो)% x मिति-समयको रूपमा: बुध अक्टोबर 6 1 99% एक्स समयको रूपमा: 23:59:59% y वर्ष (00- 99) % Y यस वर्षको रूपमा: 1 99 0% Z समयक्षेत्र (वा यदि निर्धारण योग्य छैन भने) %% एक नंगे प्रतिशत चिन्ह

अन्य% विनिर्देशहरू अपरिभाषित छन्। अन्य क्यारेक्टरहरू अयोग्य रूपमा पारित हुनेछन्। केवल सी स्थानीय समर्थित छ।

दैलो फ्लैगले एपको स्रोतको रूपमा प्रयोग गर्न को लागी धेरै सेकेन्डहरू परिचय गर्दछ जसबाट ढाँचामा ढाँचामा राखिएको छ। अन्यथा, वर्तमान समय प्रयोग गरिन्छ।

GMT समयक्षेत्र प्रयोग गर्न -gmt झण्डा बल टाइमस्ट्याम्प आउटपुट। झण्डा बिना, स्थानीय समयक्षेत्र प्रयोग गरिन्छ।

जाल [[आदेश] सिग्नलहरू]
दिएका आदेशहरूलाई कुनै दिएको सिग्नलको भविष्यको रसिदमा क्रियान्वित हुने कारणले गर्दा। आदेश वैश्विक दायरामा क्रियान्वित गरिएको छ। यदि आदेश अनुपस्थित छ भने, संकेत कार्य फर्काइएको छ। यदि आदेश स्ट्र्रिङ हो SIG_IGN हो, संकेतहरू उपेक्षा गरिएका छन्। यदि आदेश स्ट्र्रिङ् SIG_DFL हो भने, सिग्नलहरू नतिजा प्रणाली पूर्वनिर्धारित परिणाम हुन्। संकेतहरू या त एकल सिग्नल वा सिग्नलहरूको सूची हो। सिग्नल सिग्नल (3) अनुसार संख्यात्मक वा प्रतीकात्मक रूपमा तोकिएको हुन सक्छ। "SIG" उपसर्ग हटाउन सकिन्छ।

कुनै आर्गुमेन्ट (वा आर्गुमेन्ट-नोम्बर) सँग, जाल हालै कार्यान्वयन गरिने जाल आदेशको सिग्नल नम्बर फर्काउँछ।

द-कोडको फ्ल्यागले आदेशको फिर्ती कोड प्रयोग गर्दछ जुन कुन कोडमा Tcl को बारेमा मूल रूपमा सुरु भएको आदेश फर्काउने बारे फर्काउने थियो।

-प्यापप झण्डाले यो आदेशले जाल घोषित गरेमा आदेश चलिरहेको बेला समयमा अनुवादक सक्रिय प्रयोग गरेर मूल्याङ्कन गर्न मूल्याङ्कन गर्दछ।

यसनाममा फ्ल्यागले हालको कार्यान्वयन गरिरहेको ट्र्याप आदेशको सिग्नल नाम फर्काउन आदेशको कारणले गर्दा।

म्याक्स झण्डाले जाल आदेशलाई सेट गर्न सक्ने सबैभन्दा ठूलो सिग्नल नम्बर फर्काउनको कारण हो।

उदाहरणका लागि, "trap {send_user" Ouch! "} SIGINT" "प्रिन्ट" Ouch! " प्रत्येक पटक प्रयोगकर्ताले प्रेस गर्दछ ^ सी।

पूर्वनिर्धारित रूपमा, SIGINT (जुन सामान्यतया ^ सी थिचेर उत्पन्न गरिएको हुन सक्छ) र SIGTERM कारण बाहिर निस्कने आशा गर्छ। यो निम्न जालको कारण हो, पूर्वनिर्धारित द्वारा उत्पन्न हुँदा आशा सुरु हुन्छ।

जाल बाहिर निस्कनुहोस् {SIGINT SIGTERM}

यदि तपाइँ डिबगर सुरु गर्न -D झण्डा प्रयोग गर्नुहुन्छ भने, SIGINT अन्तरक्रियात्मक डिबगर सुरु गर्न पुन: परिभाषित गरिएको छ। यो निम्न जालको कारण हो:

trap {exp_debug 1} SIGINT

डिबगर जाल परिवर्तन गर्न सकिन्छ वातावरण चर EXPECT_DEBUG_INIT नयाँ ट्रप आदेशमा सेट गरेर।

तपाईं सक्नुहुन्छ, निस्सन्देह, यिनीहरू केवल तपाईंको स्क्रिप्टमा जाल आदेशहरू थप्दा यी ओवरराइड गर्नुहोस्। विशेष गरी, यदि तपाईको "जाल बाहिर निस्कने सिंक" छ भने, यो डिबगर जाल ओभरराइड गर्नेछ। यो उपयोगी छ यदि तपाई प्रयोगकर्ताहरूलाई डिबगरमा प्राप्त गर्नबाट रोक्न चाहानुहुन्छ।

यदि तपाईं SIGINT मा आफ्नो आफ्नै जाल परिभाषित गर्न चाहनुहुन्छ तर अहिले चलिरहेको बेला डिबगरको लागि जाल, प्रयोग गर्नुहोस्:

यदि {! [exp_debug]} {trap mystuff SIGINT}

वैकल्पिक रूपमा, तपाईं अन्य सिग्नल प्रयोग गरेर डिबगरमा जाल गर्न सक्नुहुन्छ।

जालले तपाईंलाई SIGALRM को लागि कार्य ओवरराइड गर्न दिनेछैन किनभने यो अपेक्षा गर्न प्रयोग गरिन्छ। विच्छेदन आदेशले SIGALRM लाई SIG_IGN मा सेट गर्दछ (बेवास्ता गर्छ)। तपाईले यो पुन: सक्षम गर्न सक्नुहुनेछ जबसम्म तपाइँ पछि यो स्पन अर्डरहरू असक्षम गर्नुहोला।

थप जानकारीको लागि संकेत (3) हेर्नुहोस्।

पर्खनुहोस् [args]
कुनै प्रायोजित प्रक्रिया सम्म ढिलाइ (वा हालको प्रक्रिया यदि कुनै नाम छैन) बन्द गर्दछ।

सामान्यतया प्रतीक्षा गर्नुहोस् चार पूर्णाङ्कहरूको सूची फर्काउँछ। पहिलो पूर्णांक यो प्रक्रियाको पिड हो जुन प्रतीक्षा भएको थियो। दोस्रो पूर्णांकसँग सम्बन्धित स्पोन आइडी हो। तेस्रो पूर्णांक -1 हो यदि अपरेटिङ सिस्टम त्रुटि भयो, वा 0 अन्यथा। यदि तेस्रो पूर्णांक 0 थियो भने, चौथो पूर्णांक स्पाइस गरिएको प्रक्रियाद्वारा फर्काइएको स्थिति हो। यदि तेस्रो पूर्णांक थियो -1, चौथो पूर्णांक सञ्चालन प्रणाली द्वारा अज्ञात सेटको मान हो। विश्वव्यापी चर त्रुटि कोड पनि सेट गरिएको छ।

अतिरिक्त तत्वहरू प्रतीक्षाबाट फिर्ती मानको अन्तमा देखा पर्न सक्छ। एक वैकल्पिक पाँचौं तत्वले एक वर्गको जानकारी पहिचान गर्दछ। हाल, यो तत्वको लागि मात्र सम्भव मान CHILDKILLED हो जसमा अर्को दुई मानहरू सी-स्ट्रिङ सिग्नल नाम र छोटो मौलिक विवरण हो।

इन-फ्लैगले नामलाई स्पोनन (सम्बद्ध प्रक्रिया आईडी) अनुरूपसँग पर्खिरहेको प्रक्रियालाई घोषणा गर्दछ। SIGCHLD ह्यान्डलर भित्र, यो स्पन आईडी -1 प्रयोग गरेर कुनै पनि प्रायोजित प्रक्रियाको प्रतीक्षा गर्न सम्भव छ।

-अन्तोत झण्डाले चाँडै फर्केर फर्किने प्रतीक्षालाई सफल प्रतीक्षाको संकेतको साथ दिन्छ। जब प्रक्रिया (पछि) बाट बाहिर निस्कन्छ, यो स्पष्ट प्रतीक्षाको आवश्यकता बिना स्वचालित रूपमा गायब हुनेछ।

पर्खको आदेश पनि प्रयोग गर्न सकिन्छ "दाई -1" आर्गुमेन्ट प्रयोग गरेर फर्काइएको प्रक्रियाको लागि पर्खनुहोस्। प्राय: प्रक्रियाहरूको यसको प्रयोगको विपरीत, यो आदेश कुनै पनि समयमा निष्पादित गर्न सकिन्छ। त्यहाँ कुनै प्रक्रिया छैन जसमा प्रक्रिया पुन : निर्धारण गरिएको छैन। यद्यपि, रिटर्न मान प्रक्रिया आईडीको लागि जाँच गर्न सकिन्छ।

लाइब्रेरीहरू

अपेक्षित लिपिहरूको लागि दुई निर्मित-निर्मित पुस्तकालयहरू बारे स्वतः जान्दछ। यो चर exp_library र exp_exec_library मा नाम दिईएको निर्देशिका द्वारा परिभाषित गरिएको छ। दुवै को उपयोगिता फाईलहरु को लागी छ कि अन्य लिपिहरु द्वारा प्रयोग गर्न सकिन्छ।

exp_library मा वास्तुकला-स्वतन्त्र फाइलहरू छन्। exp_exec_library मा वास्तुकला-निर्भर फाइलहरू छन्। तपाईंको प्रणालीमा निर्भर गर्दछ, दुवै डाइरेक्टरीहरू पूर्ण रूपमा खाली हुन सक्छ। फाइलको अस्तित्व $ exp_exec_library / cat-buffers वर्णन गर्दछ कि तपाईंको / बिन / बिट बफर पूर्वनिर्धारित रूपमा।

PRETTY-PRINTING

सुन्दर-मुद्रण अपेक्षित लिपिहरूका लागि एक vgrind परिभाषा उपलब्ध छ। अपेक्षित वितरणको साथ प्रदान गरिएको vgrind परिभाषालाई सही ढंगले स्थापित गरिएको छ, तपाईं यसलाई यसको रूपमा प्रयोग गर्न सक्नुहुन्छ:

vgrind-flexpect फाइल

उदाहरणहरू

यो धेरै व्यक्ति कसरी वर्णन गरिएको छैन कि कसरी सबै कुरा सँगै राख्ने व्यक्ति पृष्ठ वर्णन गर्दछ। म तपाईंलाई पढ्न र अपेक्षा वितरणको उदाहरण डाइरेक्टरीमा उदाहरणहरू प्रयास गर्न प्रोत्साहित गर्दछु। तिनीहरूमध्ये केही वास्तविक प्रोग्राम हुन्। अरू केही निश्चित प्रविधिहरूको मात्र दृष्टान्त हुन्, र निस्सन्देह, एक जोडि केवल छिटो हैकहरू छन्। INSTALL फाइलसँग ती कार्यक्रमहरूको द्रुत दृश्यावलोकन छ।

अपेक्षा पत्रहरू (हेर्नुहोस् हेर्नुहोस्) पनि उपयोगी छन्। जबकि केहि कागजात अपेक्षा को पूर्व संस्करणहरु संग वाक्य रचना को उपयोग गर्दछ, साथ तर्कसंगत अझै पनि मान्य छ र यस मान्छे को पृष्ठ भन्दा धेरै विस्तार मा जान्छ।

CAVEATS

एक्स्टेन्सन अपेक्षाको आदेश नामहरूसँग टकराउन सक्छ। उदाहरणका लागि, Tk द्वारा पूर्ण रूपमा फरक उद्देश्यको लागि परिभाषित गरिएको छ। यस कारणका लागि, अधिकांश अपेक्षा आदेशहरू "exp_XXXX" को रूपमा उपलब्ध छन्। आदेशहरू र चरहरू "exp", "inter", "spawn", र "टाइमआउट" सँग सुरु हुने उपनामहरू छैनन्। यदि तपाइँ वातावरणको बीच यो अनुकूलता चाहिन्छ भने विस्तारित आदेश नामहरू प्रयोग गर्नुहोस्।

आशा पनि स्कोपिंगको उदार दृष्टिकोण लिन्छ। विशेष गरी, चर कार्यक्रमको लागि विशेष आदेशहरू द्वारा पढ्न चरहरू स्थानीय क्षेत्रबाट पहिलो खोजी गरिनेछ, र यदि फेला परेन भने, विश्वव्यापी दायरामा। उदाहरणको लागि, यसले "प्रक्रिया प्रक्रिया" लाई प्रत्येक प्रक्रियामा "ग्लोबल टाइम आउटआउट" राख्न आवश्यक छ। अर्कोतर्फ, लिखित चरहरू सधैँ स्थानीय दायरामा छन् (जबसम्म "ग्लोबल" आदेश जारी गरिएको छैन)। यो सामान्य कारण यो कारणले गर्दा स्पन प्रक्रियामा कार्यान्वयन गरिन्छ। प्रक्रिया बाहिर बाहिर, spawn_id अब अवस्थित छैन, त्यसैले प्रायोजित प्रक्रिया अब स्कपिंगको कारण पहुँच योग्य छैन। यस्तो प्रक्रियामा "global spawn_id" थप्नुहोस्।

यदि तपाइँ बहुगुप्त क्षमता सक्षम गर्न सक्नुहुन्न (जस्तै, तपाईंको प्रणालीले नतिजा (BSD *। *), सर्वेक्षण (एसवीआर> 2), र नमिल्ने कुनै पनि कुरालाई समर्थन गर्दैन), आशा मात्र एक समयमा एक एकल प्रक्रिया नियन्त्रण गर्न सक्षम हुनेछ। यस अवस्थामा, spawn_id सेट गर्ने प्रयत्न नगर्नुहोस् , न त एक प्रक्रिया प्रक्रिया चलिरहेको बेला कार्यान्वयन गरेर प्रक्रियाहरू कार्यान्वयन गर्नुपर्छ। यसबाहेक, तपाईं एकै समयमा धेरै प्रक्रियाहरू (प्रयोगकर्ताको रूपमा सहित) बाट अपेक्षा गर्न सक्नुहुन्न

टर्मिनल प्यारामिटरले लिपिहरूमा ठूलो प्रभाव हुन सक्छ। उदाहरणको लागि, यदि लिपिको गूंज लगाउनको लागी लिपि लेखिएको छ भने यो गल्ती हुन्छ भने यो दुर्व्यवहार हुनेछ। यस कारणका लागि, पूर्वनिर्धारित रूपमा सम्वन्धित टर्मिनल प्यारामिटरहरू अपेक्षा गर्नुहोस्। दुर्भाग्यवश, यसले अन्य कार्यक्रमहरूको लागि अप्रिय चीज बनाउन सक्छ। उदाहरणको रूपमा, एएकहरूको शेलले "सामान्य" म्यापिंगहरू परिवर्तन गर्न चाहन्छ: नयाँलाइनहरू क्यारेज-फिर्तीमा नयाँलाइनहरूको सट्टामा नयाँलाइनहरूमा नक्सामा म्याप हुन्छ, र गूंज असक्षम गरिएको छ। यसले आगत रेखा सम्पादन गर्न एक एमेक प्रयोग गर्न अनुमति दिन्छ। दुर्भाग्यवश, आशा सम्भवतः यो अनुमान गर्न सक्दैन।

तपाई अनुरोध गर्न सक्नुहुनेछ कि टर्मिनल प्यारामिटरहरूको यसको पूर्वनिर्धारित सेटिङ ओभरराइड गर्नुहोस्, तर यस्तो वातावरणको लागि लिपिहरू लेख्दा तपाईंले धेरै सावधान रहनुपर्छ। Emacs को मामला मा, गूंज र अन्त-लाइन म्याप्सिंग जस्तै चीजहरु मा निर्भर राखन।

आदेशहरू स्वीकृत तर्कहरू एक सूचीमा ब्रेकिएको ( आशा भेरिएन्टहरू र अन्तरक्रिया ) एक हिसाबले प्रयोग गर्दछ निर्णय गर्नका लागि यदि सूची वास्तवमा एउटा तर्क वा धेरै हो। हिस्टिस्टिक केवल यो मामला मा विफल हुन सक्छ जब सूची वास्तव मा एक तर्क को प्रतिनिधित्व गर्दछ जो कि उनको बीच गैर-व्हाइटस्पेस वर्णहरु संग धेरै एम्बेडेड \ n को छ। यो पर्याप्त असुविधाजनक देखिन्छ, तथापि तर्क "-नब्रेस" प्रयोग गर्न सकिन्छ एक एकल तर्कलाई एक तर्कको रूपमा हस्तान्तरण गर्न बलियो। यो प्रायोगिक रूपमा मेसिन-उत्पन्न अपेक्षा कोडको साथ प्रयोग गर्न सकिन्छ। त्यसै गरी, -अन्य एकाधिक पद्धति / कार्यहरू सङ्कलन गर्न एकल तर्कलाई बल दिन्छ।

BUGS

यो साँच्चै कार्यक्रम "सेक्स" ("स्मार्ट एक्क्रेक" को लागि वा "पठाउनु" को लागि) नामकरण गर्न प्रलोभन थियो, तर राम्रो अर्थ (वा सायद सिर्फ पुरातनवाद) सफल भयो।

केही प्रणालीहरूमा, जब एक शेल स्पोजन गरिन्छ, यसले टिटी पहुँच गर्न सक्षम भएन तर यसको पनि चल्छ। यसको मतलब तपाईको प्रणालीसँग नियन्त्रण गर्ने तालिम प्राप्त गर्ने एक तन्त्रणा छ जुन अपेक्षाको बारे थाहा छैन। कृपया यो के हो पत्ता लगाउनुहोस्, र यो जानकारी मलाई मलाई फिर्ता पठाउनुहोस्।

अल्ट्राकिक्स 4.1 (कम्तीमा अन्तिम वरिपरि अन्तिम संस्करणहरू) माथि 1000000 को टाइमआउट मानिन्छ 0 बराबरको।

डिजिटल युनिक्स 4.0 ए (र सम्भावित अन्य संस्करणहरू) यदि तपाईंले सिग्रेचडी हैंडलर परिभाषित गर्नुहुन्छ भने pty को आवंटित गर्न इन्कार गर्दछ। थप जानकारीको लागि अनुच्छेद गरिएको पृष्ठ हेर्नुहोस्।

आईआरआईएस 6.0 ले pty अनुमतिहरू सही तरिकाले सम्हाल्न सक्दैन ताकि यदि कसैले कसैलाई प्रयोग गर्नुभन्दा पहिले pty आवंटित गर्ने प्रयास गर्नु हो, यो विफल हुन्छ। IRIX 6.1 मा स्तरवृद्धि गर्नुहोस्।

Telnet (SunOS 4.1.2 अन्तर्गत प्रमाणित मात्र) यदि TERM सेट गरिएको छैन भने पर्ख्छ। यो cron, at र cgi स्क्रिप्टमा समस्या छ, जुन TERM परिभाषित गर्दैन। यसकारण, तपाईंले यसलाई स्पष्ट रूपमा सेट गर्नु पर्छ - सामान्यतया अप्रासंगिक कुन प्रकारमा। यो केवल केहि गर्न सेट छ! निम्नका सम्भावनाहरूको लागि निम्न सम्भावनाहरू।

env (TERM) vt100 सेट गर्नुहोस्

टिप (प्रमाणित मात्र BSDI बीएसडी / ओएस 3.1 i386 अन्तर्गत) हुन्छ यदि SHELL र HOME सेट गरिएको छैन। यो cron , at र cgi लिपिहरूमा एक समस्या हो, जुन यी वातावरण चरहरू परिभाषित गर्दैन। यसकारण, तपाईंले तिनीहरूलाई स्पष्ट रूपमा सेट गर्नुपर्छ - सामान्यतया अप्रासंगिक कुन प्रकारको। यो केवल केहि गर्न सेट छ! निम्नका सम्भावनाहरूको लागि निम्न सम्भावनाहरू।

env (SHELL) सेट / बिन / एस सेट सेट env (HOME) / usr / local / bin

Ptys को केहि कार्यान्वयनहरू डिजाइन गरिएको छ ताकि प्रक्रिया फाइल फाइल वर्णनकर्ता बन्द गरिसकेपछि कुनै पनि नपढिएको आउटपुट 10 देखि 15 सेकेण्ड पछि (वास्तविक संख्या कार्यान्वयन-निर्भर) हुन्छ। यसरी कार्यक्रमहरू जस्तै आशा गर्नुहोस्

spawn मिति सुत्न 20 आशा

असफल हुनेछ। यसबाट बच्नको लागि, गैर-अन्तरक्रियात्मक कार्यक्रमहरूलाई स्पन गर्नुको सट्टा कार्यान्वयन गर्नुहोस् । त्यस्ता परिस्थितिहरू कल्पनाशील छन्, अभ्यासमा मैले त्यस्तो अवस्था सामना गर्नुभएन जुन यस व्यवहारको कारण साँच्चै अन्तरक्रियात्मक कार्यक्रमको अन्तिम उत्पादन गुमाउने छ।

अर्कोतर्फ, क्रेय युनिकोस ptys फाईल वर्णनकर्ता बन्द भएपछि केही तुरुन्तै कुनै नपढिएको आउटपुट फेंकन्छ। मैले यो क्रयलाई रिपोर्ट गरेको छु र तिनीहरू फिक्समा काम गरिरहेका छन्।

कहिलेकाहीँ ढिलाइ र प्रतिक्रिया बीचको ढिलाइ आवश्यक पर्दछ, जस्तै जब टिटी इन्टरफेसले UART सेटिङहरू वा सुरूवात बिटहरू हेर्न खोज्ने गरी बड दरहरू परिवर्तन गर्दछ। सामान्यतया, यो सबै आवश्यक छ दोस्रो वा दुईको लागि सुत्न। एक बढी बलियो प्रविधि पुन: प्रयास गर्न आवश्यक छ जबसम्म हार्डवेयर आगत प्राप्त गर्न तयार छ। निम्न उदाहरणले दुवै रणनीतिहरू प्रयोग गर्दछ:

"गति 9 0000 \ r" पठाउनुहोस्; सुन्दरी 1 आशा {timeout {send "\ r"; exp_continue} $ prompt}

जाल -कोडले कुनै पनि आदेशसँग काम गर्दैन जुन Tcl को घटना लूपमा बस्दछ, जस्तै नींद। समस्या यो घटना पाशमा, Tcl ले async घटना हैंडलरबाट फिर्ती कोडहरू डिस्प्ल गर्दछ। एक workaround जाल कोडमा झण्डा सेट गर्न हो। त्यसपछि अर्डर पछि तुरुन्त झण्डा जाँच गर्नुहोस् (जस्तै, निद्रा)।

Expect_background आदेशले समय-समय आर्गुमेन्टलाई बेवास्ता गर्दछ र सामान्य समयमा टाइमआउटको कुनै अवधारणा छैन।

& # 34; EXPECT HINTS & # 34;

अपेक्षाको बारेमा केहि चीजहरू छन् जुन गैर-सहज हुन सक्छ। यस सेक्शन को केहि केहि सुझावहरु को साथ यिनी केहि चीजहरुलाई ठेगाना लगाउन प्रयास गर्दछ।

एक साधारण आशा समस्या शेल संकेतहरू पहिचान गर्न कसरी छ। चूंकि यी फरक फरक मान्छेहरु र विभिन्न गोलाहरू द्वारा अनुकूलित हुन्छन्, छिटो जान्न बिना पोर्टेबल स्वचालित रूपमा आरलगइन गाह्रो हुन सक्छ। एक उचित अधिवेशनले प्रयोगकर्ताहरूलाई नियमित चर एक्स्पेस (EXPECT_PROMPT) मा चरम (विशेष गरी, यसको अन्त) वर्णन गर्दछ। निम्न जस्तै कोड प्रयोग गर्न सकिन्छ। यदि EXPECT_PROMPT अवस्थित छैन भने, कोडसँग अझै पनि काम गर्ने राम्रो मौका छ।

प्रॉम्प्ट सेट गर्नुहोस् "(% | # | \\ $) $"; # डिफल्ट प्रॉम्प्ट catch {set prompt $ env (EXPECT_PROMPT)} expect -re $ prompt

म तपाईंलाई प्रोत्साहन गर्ने जुनको अन्त्य सामेल गर्ने पैटर्नहरूको अपेक्षा लेख्न प्रोत्साहन गर्दछु। यो सम्पूर्ण कुरा हेर्न अघि प्रश्नको उत्तरको सम्भावनालाई रोक्दछ। यसको अतिरिक्त, उनीहरूले पूर्ण रूपमा हेर्न सक्नु अघि प्रश्नहरूको जवाफ दिन सक्दछन् भने, यदि तपाईले जवाफ दिनुहुन्छ भने, तपाईंको उत्तर प्रश्नको मध्यमा फिर्ता आउन सक्छ। अन्य शब्दहरुमा, परिणामान्तरण संवाद सही हुनेछ तर पुनरुत्थान छ।

सबभन्दा बढी संकेतहरूमा अन्त्यमा एक स्पेस क्यारेक्टर समावेश छ। उदाहरणको लागि, FTP बाट प्रम्प्ट 'f', 't', 'p', '>' र। यो प्रस्ट मेल गर्न, तपाईंले यी प्रत्येक क्यारेक्टरहरूको लागि खाताहरू अनिवार्य छ। यो एक खाली गल्ती हो जुन रिक्त समावेश गर्न को लागी छैन। स्पष्ट रूपमा खाली राख्नुहोस्।

यदि तपाई फारम X * को ढाँचा प्रयोग गर्नुहुन्छ भने, * प्राप्त गरिएको अन्तिम उत्पादनमा X को अन्तबाट प्राप्त हुने सबै उत्पादनसँग मेल खान्छ। यसले सहज लाग््छ तर केहि हद सम्म भ्रमित हुन सक्छ किनभने "अन्तिम चीज प्राप्त" वाक्यांश कम्प्यूटर को गति र I / O को कर्नेल र यन्त्र ड्राइभर द्वारा प्रशोधन गरि फरक फरक पर्दछ।

विशेष गरी, मानिसहरु लाई ठूलो मात्रा मा पुग्ने प्रोग्राम आउटपुट देख्न को लागी (परमाणु रूप मा) जब वास्तविकता मा अधिकांश प्रोग्रामहरु एक समय मा आउटपुट एक लाइन को उत्पादन गर्दछ। यो अनुमान हो, अघिल्लो अनुच्छेदको ढाँचामा * हालको रेखाको अन्त्यसँग मात्र हुन सक्छ किनकि त्यहाँ जस्तो देखिन्छ जस्तो लाग्छ, किनभने म्याचको समयमा प्राप्त भएको सबै आउटपुट थियो।

आशा गर्न को लागी कुनै रास्ता छैन कि अगाडी आउटपुट आउँदैछ जब सम्म तपाईंको ढाँचा विशेष रूप देखि यसको लागि खाताहरू।

रेखा-आधारित बफरिंगमा निर्भर पनि अज्ञात छ। न केवल कार्यक्रमहरू प्रायः बफरिङ प्रकारका बारेमा प्रतिज्ञाहरू मात्र गर्दछन्, तर प्रणाली इन्डिगेसनले आउटपुट लाइनहरू तोक्न सक्छ ताकि रेखाहरू अनियमित यादृच्छिक स्थानहरूमा तोड्न सक्छ। यसैले, यदि तपाईं लेखन ढाँचामा प्रतिक्षाको अन्तिम केही वर्णहरू व्यक्त गर्न सक्नुहुन्छ भने यो बुद्धिमानी हो।

यदि तपाईं एक कार्यक्रमको अन्तिम आउटपुटमा ढाँचाको प्रतीक्षा गर्दै हुनुहुन्छ र यो कार्यक्रमले यसको सट्टामा अरुलाई उत्सर्जन गर्दछ, तपाइँ त्यस समयको कुञ्जीशब्दसँग पत्ता लगाउन सक्नुहुन्न। कारण यो आशा छ कि आशा समय समाप्त हुनेछ - यसको सट्टा यो एक इफेक्ट संकेत पाउनेछ। यसको सट्टा प्रयोग गर्नुहोस्। अझ पनि राम्रो, दुबै प्रयोग गर्नुहोस्। त्यो तरिका यदि त्यो रेखा सधैँ वरिपरि जान्छ, तपाईलाई रेखालाई सम्पादन गर्न आवश्यक पर्दैन।

नयाँलाइनहरू सामान्यतया गाडी रिटर्नमा परिवर्तित हुन्छन्, टर्मिनल ड्राइभद्वारा आउटपुटमा linefeed अनुक्रमहरू। यस प्रकार, यदि तपाईं एक ढाँचा चाहानुहुन्छ कि स्पष्ट रूपमा दुई लाइनहरू, बाट, भन्नुहोस्, प्रिन्ट ("foo \ nbar") सँग मेल खान्छ, तपाईले "foo \ r \ nbar" ढाँचा प्रयोग गर्नुपर्छ।

प्रयोगकर्ताबाट पढ्दा, expect_user मार्फत जब एक समान अनुवाद हुन्छ। यस अवस्थामा, जब तपाईं रिटर्न थिच्नुहुन्छ, यो एक नयाँलाइनमा अनुवाद गरिनेछ। यदि अपेक्षा भनेको प्रोग्राममा पास हुन्छ जुन कच्चा मोड (जस्तै टेलिनेट जस्तै) को टर्मिनलमा सेट गर्दछ, त्यहाँ एउटा समस्या हुन जानेछ, किनभने प्रोग्रामले वास्तविक फिर्तीको अपेक्षा गर्दछ। (केहि प्रोग्रामहरू वास्तवमा क्षमा गर्दै छन् कि उनीहरूलाई रिटर्नमा स्वचालित रूपमा नयाँलाइनहरू अनुवाद हुने छ, तर धेरै भन्दा बढी छैन।) दुर्भाग्यवश, कुनै प्रोग्रामलाई टर्मिनलमा कच्चा मोडमा पत्ता लगाउने कुनै उपाय छैन।

म्यानुअल रूपले रिटर्नको साथ नयाँलाइनहरू प्रतिस्थापन गर्नुको सट्टा, समाधान "स्टेटी कच्चा" आदेश प्रयोग गर्ने हो जुन अनुवाद बन्द हुनेछ। तथापि, यद्यपि, यसको अर्थ यो हो कि तपाइँ अब पकाएको रेखा-सम्पादन सुविधाहरू प्राप्त गर्नुहुने छैन।

अन्तर्क्रियाले तपाईंको टर्मिनलमा कच्चा मोडमा सेट गर्दछ त्यसैले यो समस्या उत्पन्न हुने छैन।

प्रायः पासवर्डहरू (वा अन्य व्यक्तिगत सूचना) भण्डारण गर्न प्रायः उपयोगी छ। यो सिफारिस गरिएको छैन किनकि कम्प्युटरमा भण्डार गरिएको सबै केहिले पहुँच गर्न संवेदनशील छ किनकि। यसकारण, एक स्क्रिप्टबाट अन्तरक्रियात्मक रूपमा प्रम्प्ट गर्दै तिनीहरूलाई शाब्दिक रूपमा एम्बेड गर्न भन्दा कम स्मार्ट विचार हो। यद्यपि, कहिलेकाहीँ यस्तो इम्बेडिंग एकमात्र संभावना हो।

दुर्भाग्यवश, UNIX फाईल प्रणालीसँग कार्यान्वयन योग्य तर अपरिवर्तनीय स्क्रिप्टहरू सिर्जना गर्ने कुनै सीधा तरिका छैन। Setgid शेल लिपिहरूलाई समर्थन गर्ने प्रणालीहरूले यो रूपमा निम्न रूपमा अनुकरण गर्न सक्छन्:

सामान्यको रूपमा अपेक्षा स्क्रिप्ट (गोप्य डेटा समावेश गर्दछ) सिर्जना गर्नुहोस्। यसको अनुमतिहरू 750 (-rwxr- x ---) बनाउनुहोस् र एक विश्वसनीय समूहको मालिक हो, यानी, एक समूह जसले यसलाई पढ्न अनुमति दिएको छ। आवश्यक भएमा, यो उद्देश्यको लागि नयाँ समुह सिर्जना गर्नुहोस्। अर्को, अनुमतिहरू / बिन / स्क्रिप्टलाई अनुमति दिनुहोस् 2751 (-rwxr-s - x) सँग समान समूहको स्वामित्वमा।

नतिजा एक लिपि हो जुन जुनद्वारा क्रियान्वित (र पढ्न सकिन्छ)। जब बोलाइयो, यसले अपेक्षा स्क्रिप्ट चलाउँछ।

& # 34; देख्यो & # 34;

Tcl (3), libexpect (3)
"अपेक्षा अन्वेषण: स्वचालन अन्तरक्रियात्मक कार्यक्रमका लागि एक Tcl आधारित टूलकिट" डन लिबेस, पीपी 602, आईएसबीएन 1-56592-090-2, ओरेलेली र एसोसिएट्स, 1 99 5।
"आशा: अन्तरक्रियात्मकता को अनियंत्रित फिट", डन लिबस द्वारा , ग्रीष्मकालीन 1990 यूएसएक्सन सम्मेलन, एनिहे, क्यालिफोर्निया, जुन 11-15, 1 99 0 को कार्यवाही।
.म "डोन लिब्स" द्वारा "ओमेन्ट सिस्टम एडमिनिस्ट्रेशन टास्क" को लागी प्रयोग गरिदै, 1990 यूएसएक्सिक्स ठूलो स्थापना प्रणाली प्रशासन सम्मेलन, कोलोराडो स्प्रिंग्स, कोलोराडो, अक्टोबर 17-19, 1 99 0 को कार्यवाही।
I "Tcl: एक एम्बेड गर्न योग्य कमांड भाषा" जॉन ओस्टरहोआउट द्वारा, शीतकालीन 1990 यूएसएक्सई कन्फिगरेसन, वाशिंगटन, डीसी, जनवरी 22-26, 1 99 0 को कार्यवाही, "मन्त्रालय: अन्तरक्रियात्मक कार्यक्रमका लागि लिपिहरू" डन लिब्स द्वारा, कम्प्युटिंग सिस्टम , Vol। 4, नं। 2, विश्वविद्यालय क्यालिफोर्निया प्रेस पत्रिकाहरू, नोभेम्बर 1 99 7..आइ "रिग्रेसन टेस्टिङ र कन्टिमेसन टेस्टिङ इंटरैक्टिव कार्यक्रम", डन लिबस द्वारा, ग्रीष्म 1 99 2 यूएसएनेक्स कन्फिगरेसन, पीपी 135-144, पीएन 135 एन्टोनियो, TX, जून 12-15, 1 99 2 ... आई "किबिट्ज - जोड्ने बहुविध अन्तरक्रियात्मक कार्यक्रमहरू", डन लिबस द्वारा, सफ्टवेयर - अभ्यास र अनुभव, जॉन विली एन्ड संन्स, वेस्ट ससेक्स, इङ्गल्याण्ड, भोल्युम।

23, नं। 5, मई, 1 99 3। "डन लिबस द्वारा," टीसीएल अनुप्रयोगहरूको लागि एक डिबगर ", 1 9 3 9 Tcl / Tk कार्यशाला, बर्कले, CA, जुन 10-11, 1 99 3 को कार्यवाही।

AUTHOR

डन लिब्स, मानक र प्रौद्योगिकी को राष्ट्रीय संस्थान

ACKNOWLEDGMENTS

Tcl को लागि जन Ousterhout को लागि धन्यवाद, र स्कॉट Paisley प्रेरणा को लागि। आशाको स्वत: कन्फिगरेसन कोडको लागि रोब सवोयलाई धन्यवाद।

इतिहास फाइलले अपेक्षाको विकासको धेरै कागजातहरू दस्तावेज गर्दछ। यसले रोचक पढाइ दिन्छ र यो सफ्टवेयरलाई थप जानकारी दिन्छ। मैले उल्लेख गरेका व्यक्तिहरूलाई धन्यवाद जुन मैले बग फिक्सहरू पठाएको छु र अन्य सहयोग दिए।

अपेक्षा को डिजाइन र कार्यान्वयन अमेरिका सरकार द्वारा भाग को लागि भुक्तानी गरिएको थियो र यसैले सार्वजनिक डोमेन मा छ। तथापि लेखक र NIST क्रेडिट मन पर्छ यदि यो कार्यक्रम र कागजात वा उनीहरूको अंश प्रयोग गरिन्छ।