Skip to main content

लिनक्स / यूनिक्स कमांड निर्देशों और उदाहरणों की अपेक्षा करें

Linux Tutorial for Beginners: Introduction to Linux Operating System (जून 2026)

Linux Tutorial for Beginners: Introduction to Linux Operating System (जून 2026)
Anonim

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

एक्सपेक्टक उम्मीद और रुपये का मिश्रण है। यह अपेक्षा और टी की इच्छा की तरह व्यवहार करता है। उम्मीद टीसीएल के बिना सीधे सी या सी ++ में भी इस्तेमाल की जा सकती है।

"उम्मीद" नाम यूकेपी, किर्मिट और अन्य मॉडेम नियंत्रण कार्यक्रमों द्वारा लोकप्रिय / भेजने के अनुक्रमों के विचार से आता है। हालांकि यूकेपी के विपरीत, उम्मीद सामान्यीकृत की जाती है ताकि इसे किसी भी प्रोग्राम और कार्य के साथ उपयोगकर्ता स्तर के कमांड के रूप में चलाया जा सके। उम्मीद एक ही समय में कई कार्यक्रमों से बात कर सकते हैं।

क्या उम्मीद कर सकते हैं

उदाहरण के लिए, यहां कुछ चीजें हैं जो उम्मीद कमांड कर सकती हैं:

  • अपने कंप्यूटर को वापस डायल करने के कारण, ताकि आप कॉल के भुगतान के बिना लॉग इन कर सकें।
  • एक गेम शुरू करें और यदि इष्टतम कॉन्फ़िगरेशन प्रकट नहीं होता है, तो इसे बार-बार पुनरारंभ करें) जब तक यह नहीं करता है, और फिर आपको नियंत्रण सौंपता है।
  • Fsck चलाएं, और इसके सवालों के जवाब में, पूर्व निर्धारित मानदंडों के आधार पर "हां" या "नहीं" का उत्तर दें या आपको वापस नियंत्रण दें।
  • किसी अन्य नेटवर्क से कनेक्ट करें और स्वचालित रूप से अपना मेल पुनर्प्राप्त करें ताकि ऐसा प्रतीत होता है कि यह मूल रूप से आपके स्थानीय सिस्टम को भेजा गया था।
  • पर्यावरण चर, वर्तमान निर्देशिका, या rlogin, टेलनेट, टिप, सु, या chgrp भर में किसी भी तरह की जानकारी ले लो

शेल इन कार्यों को निष्पादित नहीं कर सकता है इसके कई कारण हैं। उम्मीद के साथ सभी संभव हैं।

आम तौर पर, उम्मीद किसी भी प्रोग्राम को चलाने के लिए उपयोगी होती है जिसके लिए कार्यक्रम और उपयोगकर्ता के बीच बातचीत की आवश्यकता होती है। यह आवश्यक है कि बातचीत को प्रोग्रामेटिक रूप से चिह्नित किया जा सके। उम्मीद है कि प्रोग्राम को नियंत्रित किए बिना प्रोग्राम को वापस नियंत्रण भी दे सकता है। इसी प्रकार, उपयोगकर्ता किसी भी समय स्क्रिप्ट पर नियंत्रण वापस कर सकता है।

प्रयोग

निष्पादित करने के लिए आदेशों की सूची के लिए cmdfile को पढ़ने की अपेक्षा करें। अपेक्षाएं उन प्रणालियों पर पूरी तरह से लागू की जा सकती हैं जो # का समर्थन करती हैं! स्क्रिप्ट को निष्पादन योग्य के रूप में चिह्नित करके और स्क्रिप्ट में पहली पंक्ति बनाने के द्वारा नोटेशन:

#! / usr / स्थानीय / बिन / उम्मीद-एफ

बेशक, पथ को सटीक रूप से वर्णन करना चाहिए कि जीवन की अपेक्षा करें। / usr / स्थानीय / बिन सिर्फ एक उदाहरण है।

-सी ध्वज स्क्रिप्ट में किसी भी से पहले निष्पादित करने के लिए कमांड को प्रीफ़ेस करता है। शेल द्वारा तोड़ने से रोकने के लिए कमांड को उद्धृत किया जाना चाहिए। यह विकल्प कई बार इस्तेमाल किया जा सकता है। एकाधिक आदेशों को अर्धविराम से अलग करके एकल-सी के साथ निष्पादित किया जा सकता है। आदेशों को उनके आदेश में निष्पादित किया जाता है। Expectk का उपयोग करते समय, यह विकल्प -command के रूप में निर्दिष्ट है।

-D ध्वज कुछ नैदानिक ​​आउटपुट को सक्षम बनाता है, जो मुख्य रूप से आदेशों और इंटरैक्ट जैसे कमांड की आंतरिक गतिविधि की रिपोर्ट करता है। एक ध्वज स्क्रिप्ट की शुरुआत में इस ध्वज का "exp_internal 1" जैसा ही प्रभाव होता है, साथ ही उम्मीद का संस्करण मुद्रित होता है।

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

-एफ ध्वज एक फ़ाइल को प्रीफ़ेस करता है जिससे कमांड को पढ़ना है। झंडा स्वयं वैकल्पिक है क्योंकि # का उपयोग करते समय यह केवल उपयोगी है! नोटेशन, ताकि कमांड लाइन पर अन्य तर्क प्रदान किए जा सकें। Expectk का उपयोग करते समय, यह विकल्प -फाइल के रूप में निर्दिष्ट है।

डिफ़ॉल्ट रूप से, कमांड फ़ाइल को स्मृति में पढ़ा जाता है और पूरी तरह से निष्पादित किया जाता है। कभी-कभी फ़ाइलों को एक पंक्ति में पढ़ने के लिए वांछनीय होता है। मनमाने ढंग से फ़ाइलों को इस तरह से संभालने के लिए मजबूर करने के लिए, -b ध्वज का उपयोग करें। Expectk का उपयोग करते समय, यह विकल्प -बफर के रूप में निर्दिष्ट है।

यदि स्ट्रिंग "-" को फ़ाइल नाम के रूप में आपूर्ति की जाती है, तो इसके बजाय मानक इनपुट पढ़ा जाता है। वास्तव में "-" नाम की फ़ाइल से पढ़ने के लिए "./-" का प्रयोग करें।

-I ध्वज किसी फ़ाइल से पढ़ने के बजाय आदेशों के लिए इंटरैक्टिव रूप से संकेत करने की अपेक्षा करता है। निकास निकास आदेश या ईओएफ पर समाप्त हो जाता है। -I ध्वज माना जाता है कि न तो एक कमांड फ़ाइल nor -c का उपयोग किया जाता है। Expectk का उपयोग करते समय, यह विकल्प -इंटरिएक्टिव के रूप में निर्दिष्ट है।

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

#! / usr / स्थानीय / बिन / उम्मीद -

ध्यान दें कि सामान्य getopt (3) और निष्पादित (2) सम्मेलनों को # पर तर्क जोड़ते समय देखा जाना चाहिए! लाइन।

फाइल $ exp_library / expect.rc स्वचालित रूप से मौजूद है, जब तक कि -एन ध्वज का उपयोग नहीं किया जाता है। (Expectk का उपयोग करते समय, यह विकल्प -एनओआरसी के रूप में निर्दिष्ट किया जाता है।) इसके तुरंत बाद, फ़ाइल ~ / .expect.rc स्वचालित रूप से सोर्स की जाती है, जब तक कि ध्वज का उपयोग नहीं किया जाता है। यदि पर्यावरण परिवर्तनीय DOTDIR परिभाषित किया गया है, तो इसे एक निर्देशिका के रूप में माना जाता है और .expect.rc वहां से पढ़ा जाता है। Expectk का उपयोग करते समय, यह विकल्प -norc के रूप में निर्दिष्ट है।यह सोर्सिंग किसी भी -सी झंडे को निष्पादित करने के बाद ही होती है।

-v अपने संस्करण संख्या को मुद्रित करने और बाहर निकलने का अनुमान लगाता है। एक्सपेक्टक में इसी ध्वज, जो लंबे ध्वज नामों का उपयोग करता है, है -वर्जन।

वैकल्पिक तर्क एक सूची में बनाए जाते हैं और argv नामक चर में संग्रहीत होते हैं। argc argv की लंबाई के लिए शुरू किया गया है।

यदि कोई स्क्रिप्ट उपयोग नहीं की जाती है तो Argv0 को स्क्रिप्ट या बाइनरी का नाम माना जाता है। उदाहरण के लिए, निम्नलिखित स्क्रिप्ट के नाम और पहले तीन तर्कों को प्रिंट करता है:

send_user "$ argv0 lrange $ argv 0 2 n"

आदेश

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

आदेश वर्णानुक्रम में सूचीबद्ध हैं ताकि वे जल्दी से स्थित हो सकें। हालांकि, नए उपयोगकर्ताओं को उस क्रम में स्पॉन, भेज, उम्मीद, और बातचीत के विवरण पढ़ने से शुरू करना आसान हो सकता है।

बंद करें -स्लेव -onexec 0 | 1 -i spawn_id

वर्तमान प्रक्रिया से कनेक्शन बंद कर देता है। अधिकांश इंटरैक्टिव प्रोग्राम ईओएफ को अपने स्टडीन और बाहर निकलने पर पहचानेंगे; इस प्रकार बंद करे आमतौर पर प्रक्रिया को मारने के लिए पर्याप्त है। -I ध्वज नाम spawn_id के अनुरूप बंद करने की प्रक्रिया की घोषणा करता है।

दोनों अपेक्षाओं और बातचीत से पता चल जाएगा कि वर्तमान प्रक्रिया कब निकलती है और पूरी तरह से बंद होती है, लेकिन अगर आप प्रक्रिया को मार देते हैं, तो कहें, "निष्पादन $ pid को निष्पादित करें", आपको स्पष्ट रूप से बंद करना होगा.

Theonex ध्वज यह निर्धारित करता है कि स्पॉन आईडी किसी भी नई उत्पन्न प्रक्रियाओं में बंद है या यदि प्रक्रिया ओवरले हो गई है। एक स्पॉन आईडी खोलने के लिए, मान 0 का उपयोग करें। एक गैर-शून्य पूर्णांक मान किसी भी नई प्रक्रिया में स्पॉन को बंद कर देता है।

स्लेव ध्वज स्पॉन आईडी से जुड़े दास को बंद कर देता है। जब कनेक्शन बंद हो जाता है, तो दास स्वचालित रूप से बंद हो जाता है यदि यह अभी भी खुला है।

इससे कोई फर्क नहीं पड़ता कि कनेक्शन पूरी तरह से या स्पष्ट रूप से बंद है या नहीं, आपको संबंधित कर्नेल प्रक्रिया स्लॉट को साफ़ करने के लिए प्रतीक्षा करना चाहिए। क्लोज कमांड प्रतीक्षा नहीं करता है क्योंकि कोई गारंटी नहीं है कि एक प्रक्रिया कनेक्शन बंद करने से यह निकल जाएगा।

डीबग -now 0 | 1

एक टीसीएल डीबगर को नियंत्रित करता है जिससे आप कथन के माध्यम से कदम उठा सकते हैं और ब्रेकपॉइंट्स सेट कर सकते हैं।

कोई तर्क नहीं के साथ, अगर डीबगर नहीं चल रहा है तो 1 वापस कर दिया जाता है, अन्यथा 0 वापस लौटाया जाता है।

1 तर्क के साथ, डीबगर शुरू हो गया है। 0 तर्क के साथ, डीबगर बंद कर दिया गया है। यदि कोई तर्क पहले ध्वज से पहले होता है, तो डीबगर तुरंत शुरू होता है। अन्यथा, डीबगर अगले टीसीएल कथन के साथ शुरू किया गया है।

डीबग कमांड किसी भी जाल को नहीं बदलता है। -डी ध्वज के साथ उम्मीद शुरू करने के लिए इसकी तुलना करें।

डिस्कनेक्ट कमांड टर्मिनल से एक फोर्क प्रक्रिया को डिस्कनेक्ट करता है। यह पृष्ठभूमि में चल रहा है। प्रक्रिया को अपना स्वयं का प्रक्रिया समूह दिया जाता है। मानक I / O को / dev / null पर रीडायरेक्ट किया गया है।

निम्न खंड पृष्ठभूमि में स्क्रिप्ट को जारी रखने के लिए डिस्कनेक्ट का उपयोग करता है।

अगर {कांटा! = 0} डिस्कनेक्ट से बाहर निकलें। । ।

निम्न स्क्रिप्ट एक पासवर्ड पढ़ती है और फिर हर घंटे एक प्रोग्राम चलाती है जो प्रत्येक बार चलने पर पासवर्ड मांगती है। स्क्रिप्ट पासवर्ड प्रदान करती है ताकि आपको केवल इसे एक बार टाइप करना पड़े।

send_user "पासवर्ड? " expect_user -re "(। *) n" के लिए {} 1 {} {अगर {कांटा! = 0} {नींद 3600; जारी रखें} sponn priv_prog डिस्कनेक्ट करें पासवर्ड: "$ hope_out भेजें ( 1, स्ट्रिंग) r "। । । बाहर जाएं }

खोल एसिंक्रोनस प्रक्रिया सुविधा (&) पर डिस्कनेक्ट का उपयोग करने का एक लाभ यह है कि डिस्कनेक्शन से पहले टर्मिनल पैरामीटर को सहेज सकते हैं और बाद में उन्हें नए ptys पर लागू कर सकते हैं। के साथ, उम्मीदवार को टर्मिनल के पैरामीटर को पढ़ने का मौका नहीं है क्योंकि टर्मिनल पहले से ही डिस्कनेक्ट हो जाता है, उम्मीद को नियंत्रण प्राप्त होता है।

बाहर निकलें -opts स्थिति

बाहर निकलने की अपेक्षा करता है या अन्यथा ऐसा करने के लिए तैयार होता है।

-onexit ध्वज अगली तर्क को बाहर निकलने वाले हैंडलर के रूप में उपयोग करने का कारण बनता है। एक तर्क के बिना, मौजूदा निकास हैंडलर वापस कर दिया गया है।

-बाहर जाने का कोई मार्ग नहीं ध्वज कारण उम्मीद बाहर निकलने के लिए तैयार करने के लिए, लेकिन वास्तव में ऑपरेटिंग सिस्टम पर नियंत्रण लौटने से कम रोकें। उपयोगकर्ता द्वारा परिभाषित निकास हैंडलर के साथ-साथ उम्मीदवार के आंतरिक हैंडलर भी चलते हैं। आगे उम्मीदों को निष्पादित नहीं किया जाना चाहिए। यह उपयोगी है अगर आप अन्य टीसीएल एक्सटेंशन के साथ उम्मीद कर रहे हैं। वर्तमान दुभाषिया (और मुख्य खिड़की अगर पर्यावरण में) रहता है तो अन्य टीसीएल एक्सटेंशन साफ ​​हो सकते हैं। अगर उम्मीद है बाहर जाएं फिर से कहा जाता है (हालांकि यह हो सकता है), हैंडलर पुन: चालू नहीं होते हैं।

बाहर निकलने पर, प्रसंस्कृत प्रक्रियाओं के सभी कनेक्शन बंद हैं। क्लोज़र को प्रोओड प्रोसेस द्वारा ईओएफ के रूप में पहचाना जाएगा। बाहर जाएं सामान्य _exit (2) प्रक्रिया क्या करता है उससे परे कोई अन्य कार्य नहीं करता है। इस प्रकार, उत्पन्न प्रक्रियाएं जो ईओएफ की जांच नहीं करती हैं, जारी रह सकती हैं। (निर्धारित करने के लिए विभिन्न स्थितियां महत्वपूर्ण हैं, उदाहरण के लिए, एक स्पॉन्डेड प्रक्रिया को कौन सा सिग्नल भेजा जाएगा, लेकिन ये सिस्टम-निर्भर हैं, आमतौर पर बाहर निकलने के तहत प्रलेखित (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

एक टीसीएल फ़ाइल पहचानकर्ता देता है जो मूल स्पॉन आईडी से मेल खाता है। फ़ाइल पहचानकर्ता का उपयोग तब किया जा सकता है जैसे कि इसे टीसीएल द्वारा खोला गया था खुला आदेश। (स्पॉन आईडी अब उपयोग नहीं किया जाना चाहिए। ए रुकिए निष्पादित नहीं किया जाना चाहिए।

-खुला छोड़ना ध्वज अपेक्षित आदेशों के माध्यम से पहुंच के लिए स्पॉन आईडी खोलता है। ए रुकिए स्पॉन आईडी पर निष्पादित किया जाना चाहिए।

exp_pid -i spawn_id

वर्तमान में तैयार प्रक्रिया से संबंधित प्रक्रिया आईडी लौटाता है। अगर -मैं ध्वज का उपयोग किया जाता है, पिड वापस दिए गए स्पॉन आईडी के अनुरूप होता है।

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 संस्करण

यह सुनिश्चित करने के लिए उपयोगी है कि स्क्रिप्ट अपेक्षा के वर्तमान संस्करण के साथ संगत है।

कोई तर्क के साथ, वर्तमान संस्करण उम्मीद वापस आ गया है इस संस्करण को तब आपकी स्क्रिप्ट में एन्कोड किया जा सकता है। यदि आप वास्तव में जानते हैं कि आप हाल के संस्करणों की सुविधाओं का उपयोग नहीं कर रहे हैं, तो आप पहले के संस्करण को निर्दिष्ट कर सकते हैं।

संस्करणों में बिंदुओं से अलग तीन संख्याएं होती हैं। पहला प्रमुख नंबर है। संस्करणों के लिए लिखी लिपियों उम्मीद एक अलग प्रमुख संख्या के साथ लगभग निश्चित रूप से काम नहीं करेगा। exp_version यदि बड़ी संख्या मेल नहीं खाती है तो एक त्रुटि लौटाती है।

दूसरा मामूली संख्या है। वर्तमान संस्करण की तुलना में अधिक मामूली संख्या वाले संस्करण के लिए लिखी गई स्क्रिप्ट कुछ नई सुविधा पर निर्भर हो सकती है और शायद नहीं चल सकती है। exp_version बड़ी संख्या मेल होने पर त्रुटि आती है, लेकिन स्क्रिप्ट मामूली संख्या चलने की तुलना में अधिक है उम्मीद .

तीसरा एक ऐसा नंबर है जो संस्करण तुलना में कोई भूमिका नहीं निभाता है। हालांकि, जब यह वृद्धि हुई है उम्मीद सॉफ्टवेयर वितरण किसी भी तरह से बदला जाता है, जैसे अतिरिक्त दस्तावेज या अनुकूलन द्वारा। यह प्रत्येक नए मामूली संस्करण पर 0 पर रीसेट किया गया है।

उसके साथ -बाहर जाएं झंडा, उम्मीद एक त्रुटि प्रिंट करता है और यदि संस्करण पुराना है तो बाहर निकलता है।

उम्मीद -opts pat1 body1 … -opts patn bodyn

तब तक इंतजार करता है जब तक पैटर्न में से कोई एक स्पॉन्डेड प्रक्रिया के आउटपुट से मेल नहीं खाता है, एक निश्चित समय अवधि बीत चुकी है, या एक अंत-फ़ाइल देखी जाती है। यदि अंतिम निकाय खाली है, तो इसे छोड़ा जा सकता है।

हाल ही में पैटर्न expect_before आदेश किसी भी अन्य पैटर्न से पहले इस्तेमाल किया जाता है। हाल ही में पैटर्न expect_after किसी भी अन्य पैटर्न के बाद कमांड का उपयोग किया जाता है।

अगर पूरे के लिए तर्क उम्मीद कथन को एक से अधिक पंक्ति की आवश्यकता होती है, सभी तर्क एक में "ब्रेसिड" हो सकते हैं ताकि बैकस्लैश के साथ प्रत्येक पंक्ति को समाप्त करने से बचें। इस मामले में, ब्रेसिज़ के बावजूद सामान्य टीसीएल प्रतिस्थापन होंगे।

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

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

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

पैटर्न तीन तरीकों से निर्दिष्ट हैं। डिफ़ॉल्ट रूप से, पैटर्न को टीसीएल के साथ निर्दिष्ट किया जाता है स्ट्रिंग मैच आदेश। (ऐसे पैटर्न सी-शैल नियमित अभिव्यक्तियों के समान होते हैं जिन्हें आमतौर पर "ग्लोब" पैटर्न के रूप में जाना जाता है)। -gl ध्वज का उपयोग उन पैटर्नों की सुरक्षा के लिए किया जा सकता है जो अन्यथा मेल खाते हैं उम्मीद ऐसा करने से झंडे। "-" से शुरू होने वाले किसी भी पैटर्न को इस तरह से संरक्षित किया जाना चाहिए। ("-" के साथ शुरू होने वाले सभी तार भविष्य के विकल्पों के लिए आरक्षित हैं।)

उदाहरण के लिए, निम्न खंड एक सफल लॉगिन की तलाश में है। (ध्यान दें कि गर्भपात स्क्रिप्ट में कहीं और परिभाषित प्रक्रिया माना जाता है।)

उम्मीद करें {व्यस्त {व्यस्त रहता है n; exp_continue} निरस्त "अमान्य पासवर्ड" निरस्त करने में विफल रहा टाइमआउट निरस्त}

चौथे पैटर्न पर उद्धरण आवश्यक हैं क्योंकि इसमें एक स्थान है, जो अन्यथा कार्रवाई से पैटर्न को अलग करेगा।एक ही क्रिया के साथ पैटर्न (जैसे कि तीसरे और चौथे) को क्रियाओं को फिर से सूचीबद्ध करने की आवश्यकता होती है। यह regexp-style पैटर्न (नीचे देखें) का उपयोग करके टाला जा सकता है। ग्लोब-स्टाइल पैटर्न बनाने के बारे में अधिक जानकारी टीसीएल मैनुअल में मिल सकती है।

Regexp- शैली पैटर्न Tcl के द्वारा परिभाषित वाक्यविन्यास का पालन करें regexp ("नियमित अभिव्यक्ति" के लिए छोटा) कमांड। ध्वज के साथ regexp पैटर्न पेश किए जाते हैं -re । पिछले उदाहरण को regexp का उपयोग करके पुनः लिखा जा सकता है:

उम्मीद करें {व्यस्त {व्यस्त रहता है n; exp_continue} -re "असफल | अमान्य पासवर्ड" abort timeout abort जुड़े}

दोनों प्रकार के पैटर्न "अनचाहे" हैं। इसका मतलब है कि पैटर्न को पूरी स्ट्रिंग से मेल नहीं करना पड़ेगा, लेकिन स्ट्रिंग में कहीं भी मैच शुरू और समाप्त कर सकता है (जब तक कि बाकी सब कुछ मेल खाता हो)। स्ट्रिंग की शुरुआत से मिलान करने के लिए ^ और अंत से मिलान करने के लिए $ का उपयोग करें। ध्यान दें कि यदि आप स्ट्रिंग के अंत की प्रतीक्षा नहीं करते हैं, तो आपकी प्रतिक्रिया आसानी से स्ट्रिंग के बीच में समाप्त हो सकती है क्योंकि वे स्पॉन्डेड प्रक्रिया से प्रतिबिंबित होते हैं। अभी भी सही परिणाम पैदा करते समय, उत्पादन अप्राकृतिक दिख सकता है। इस प्रकार, यदि आप स्ट्रिंग के अंत में वर्णों का बिल्कुल वर्णन कर सकते हैं तो $ का उपयोग प्रोत्साहित किया जाता है।

ध्यान दें कि कई संपादकों में, ^ और $ क्रमशः लाइनों की शुरुआत और अंत से मेल खाते हैं। हालांकि, क्योंकि उम्मीद रेखा उन्मुख नहीं है, इसलिए ये वर्ण वर्तमान में मिलान बफर की अपेक्षा में डेटा की शुरुआत और अंत (लाइनों के विपरीत) से मेल खाते हैं। (इसके अलावा, "सिस्टम अपचन" पर नीचे दिए गए नोट को देखें।)

-ex ध्वज पैटर्न को "सटीक" स्ट्रिंग के रूप में मिलान करने का कारण बनता है। *, ^, आदि की कोई व्याख्या नहीं की गई है (हालांकि सामान्य टीसीएल सम्मेलन अभी भी मनाया जाना चाहिए)। सटीक पैटर्न हमेशा अनचाहे होते हैं।

-कोई मामला नहीं ध्वज आउटपुट के अपरकेस अक्षरों को तुलना करने के लिए कारण बनाता है जैसे कि वे लोअरकेस वर्ण थे। पैटर्न प्रभावित नहीं है।

आउटपुट पढ़ने के दौरान, 2000 से अधिक बाइट्स पहले बाइट को "भूल गए" के लिए मजबूर कर सकते हैं। यह समारोह के साथ बदला जा सकता है match_max । (ध्यान दें कि अत्यधिक बड़े मान पैटर्न मैचर को धीमा कर सकते हैं।) यदि patlist है full_buffer , संबंधित निकाय अगर निष्पादित किया जाता है match_max बाइट प्राप्त हुए हैं और कोई अन्य पैटर्न मेल नहीं खाता है। चाहे या नहीं full_buffer कीवर्ड का उपयोग किया जाता है, भुलाए गए पात्र उम्मीद_out (बफर) पर लिखे जाते हैं।

अगर patlist कीवर्ड है शून्य , और नल की अनुमति है (के माध्यम से remove_nulls कमांड), यदि एक ASCII 0 मिलान किया जाता है तो इसी निकाय को निष्पादित किया जाता है। ग्लोब या regexp पैटर्न के माध्यम से 0 बाइट्स मिलान करना संभव नहीं है।

एक पैटर्न (या eof या full_buffer) से मेल खाने पर, किसी मिलान और पहले बेजोड़ आउटपुट को चर में सहेजा जाता है expect_out (बफर) । 9 regexp सबस्ट्रिंग मैचों को चर में सहेजा जाता है expect_out (1, स्ट्रिंग) के माध्यम से expect_out (9, स्ट्रिंग) । अगर -indices ध्वज का उपयोग पैटर्न से पहले, प्रारंभिक और समापन सूचकांक (के लिए उपयुक्त रूप में किया जाता है lrange ) 10 तारों के चर में संग्रहित हैं expect_out (एक्स, शुरू) तथा expect_out (एक्स, अंत) जहां एक्स एक अंक है, बफर में सबस्ट्रिंग स्थिति से मेल खाता है। 0 स्ट्रिंग्स को संदर्भित करता है जो पूरे पैटर्न से मेल खाते हैं और ग्लोब पैटर्न के साथ-साथ regexp पैटर्न के लिए जेनरेट किए जाते हैं। उदाहरण के लिए, यदि किसी प्रक्रिया ने "abcdefgh n" के आउटपुट का उत्पादन किया है, तो इसका परिणाम:

"सीडी" की उम्मीद

ऐसा लगता है कि निम्नलिखित कथन निष्पादित किए गए थे:

expect_out (0, स्ट्रिंग) सेट करें cd set_out (buffer) abcd सेट करें

और आउटपुट बफर में "efgh n" छोड़ा गया है। अगर किसी प्रक्रिया ने "abbbcabkkkka n" आउटपुट का उत्पादन किया, तो इसका नतीजा:

उम्मीद -indices -re "बी (बी *)। * (के +)"

ऐसा लगता है कि निम्नलिखित कथन निष्पादित किए गए थे:

set_out (0, start) सेट करें 1 set hope_out (0, end) 10 सेट expect_out (0, string) bbbcabkkkk set_out (1, start) सेट करें उम्मीद करें सेट_आउट (1, अंत) 3 सेट expect_out (1, स्ट्रिंग) bb set_out सेट करें (2, शुरू करें) 10 सेट उम्मीद_आउट (2, अंत) 10 सेट उम्मीद_आउट (2, स्ट्रिंग) के सेट expect_out (बफर) abbbcabkkkk

और आउटपुट बफर में "एक n" छोड़ा गया है। पैटर्न "*" (और -re "। *") प्रक्रिया से किसी और आउटपुट को पढ़ने के बिना आउटपुट बफर को फ्लश करेगा।

आम तौर पर, मिलान आउटपुट अपेक्षाकृत आंतरिक बफर से त्याग दिया जाता है। इसे पैटर्न के साथ उपसर्ग करके रोका जा सकता है -notransfer झंडा। यह ध्वज प्रयोग में विशेष रूप से उपयोगी है (और प्रयोग के दौरान सुविधा के लिए "-not" के लिए संक्षिप्त नहीं किया जा सकता है)।

मिलान आउटपुट (या eof या full_buffer) से जुड़े स्पॉन आईडी को संग्रहीत किया जाता है expect_out (spawn_id) .

-समय समाप्त ध्वज वर्तमान उम्मीद कमांड को टाइमआउट चर के मान का उपयोग करने के बजाय टाइमआउट के रूप में निम्न मान का उपयोग करने का कारण बनता है।

डिफ़ॉल्ट रूप से, वर्तमान प्रक्रिया से आउटपुट के खिलाफ पैटर्न मिलान किए जाते हैं, हालांकि -मैं ध्वज नामित spawn_id सूची से आउटपुट घोषित करता है किसी भी निम्नलिखित पैटर्न (अगले तक -मैं )। Spawn_id सूची या तो spawn_ids की एक सफेद जगह अलग सूची होनी चाहिए या spawn_ids की ऐसी सूची का संदर्भ देने वाला एक चर होना चाहिए।

उदाहरण के लिए, निम्न उदाहरण वर्तमान प्रक्रिया से "कनेक्टेड", या "व्यस्त", "विफल" या "अवैध पासवर्ड" के लिए इंतजार कर रहा है spawn_id $ proc2 द्वारा नामित।

उम्मीद करें {-i $ proc2 व्यस्त {व्यस्त रहता है n; exp_continue} -re "असफल | अमान्य पासवर्ड" abort timeout abort जुड़े}

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

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

जैसे क्रियाएं टूटना तथा जारी रहना नियंत्रण संरचना का कारण बनता है (यानी, के लिये , proc ) सामान्य तरीके से व्यवहार करने के लिए। आदेश exp_continue की अनुमति देता है उम्मीद खुद को सामान्य रूप से लौटने की बजाय निष्पादन जारी रखने के लिए।

यह स्पष्ट लूप से बचने या बार-बार अपेक्षित बयानों से बचने के लिए उपयोगी है। निम्नलिखित उदाहरण rlogin स्वचालित करने के लिए एक टुकड़े का हिस्सा है। exp_continue एक सेकंड लिखने से बचाता है उम्मीद कथन (प्रॉम्प्ट को फिर से देखने के लिए) यदि rlogin पासवर्ड के लिए संकेत देता है।

$ होस्ट पर {पासवर्ड: {stty -echo send_user "पासवर्ड ($ उपयोगकर्ता के लिए) की अपेक्षा करें:" hope_user -re "(। *) n" send_user " n" भेजें "$ hope_out (1, स्ट्रिंग) r" stty echo exp_continue} ग़लत {send_user "अमान्य पासवर्ड या खाता n" निकास} टाइमआउट {send_user "$ होस्ट के लिए कनेक्शन का समय समाप्त हो गया n" exit} eof {send_user "होस्ट करने के लिए कनेक्शन विफल: $ hope_out (buffer)" exit} - पुनः $ प्रॉम्प्ट}

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

stty raw -echo hope_after {-i $ user_spawn_id "p" {भेजें " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {इंटरैक्ट; exp_continue} "बाहर निकलें" बाहर निकलें}

डिफ़ॉल्ट रूप से, exp_continue टाइमआउट टाइमर रीसेट करता है। टाइमर पुनरारंभ नहीं किया गया है, अगर exp_continue के साथ बुलाया जाता है -continue_timer झंडा।

उम्मीद_after expect_args

समान रूप से काम करता है expect_before सिवाय इसके कि अगर दोनों से पैटर्न उम्मीद तथा expect_after मैच कर सकते हैं, उम्मीद पैटर्न का उपयोग किया जाता है। देखें expect_before अधिक जानकारी के लिए आदेश।

उम्मीद_बैकग्राउंड उम्मीद_र्ग

के रूप में एक ही तर्क लेता हैउम्मीद हालांकि, यह तुरंत लौटता है। नए इनपुट आने पर पैटर्न का परीक्षण किया जाता है। पैटर्नसमय समाप्त तथाचूक के लिए अर्थहीन हैंexpect_background और चुपचाप त्याग दिया जाता है। अन्यथाexpect_background आदेश का उपयोग करता हैexpect_before तथाexpect_after पैटर्न की तरहउम्मीद कर देता है।

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