2012-06-15 27 views
6

मैं निम्नलिखित regexp का उपयोग कर DEF_23 मेल करना चाहते हैं:

expect { 
    -re "DEF_\[0-9]*" 
    set result $expect_out(1,string) 
} 

कारण है कि यह सरणी में ऐसी कोई तत्व कहते हैं? यह $ hope_out कैसे काम करता है? और यदि मैं DEF के रूप में परिणाम असाइन करना चाहता हूं, तो regexp का उपयोग करके डीईएफ कैसे प्राप्त करें और परिवर्तनीय परिणाम को असाइन करें?

+1

क्या आपके पास 'सेट' लाइन के आस-पास अतिरिक्त ब्रेसिज़ होने का मतलब था? अन्यथा यह वास्तव में 'उम्मीद' का एक बहुत अजीब उपयोग है ... –

उत्तर

9

आप expect_out(0,string) की तलाश में हैं - सरणी तत्व 1,string पॉप्युलेट हो जाएगा यदि आप अपनी नियमित अभिव्यक्ति में ब्रांड्स को कैप्चर कर रहे थे।

expect manpage दस्तावेजों के दस्तावेज में expect_out के उपयोग आदेश की उम्मीद:

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

मैनपेज में एक उदाहरण उदाहरण है।

1

ऐसा लगता है कि उपरोक्त स्पष्टीकरण सटीक नहीं है! इस उदाहरण की जाँच करें:

$ cat test.exp 
#!/usr/bin/expect 

set timeout 5 
log_user 0 

spawn bash 

send "ls -1 db*\r" 
expect { 
    -re "^db.*$" { 
    set bkpfile $expect_out(0,string) 
    } 
} 

send_user "The filename is: $bkpfile\n" 

close 
$ ls -1 db* 
dbupgrade.log 
$ ./test.exp 
can't read "bkpfile": no such variable 
    while executing 
"send_user "The filename is: $bkpfile\n"" 
    (file "./test.exp" line 15) 
$ 

परीक्षा परिणाम एक ही है जब $ expect_out (1, स्ट्रिंग) या $ expect_out (बफर) किया जाता है। क्या मुझे कुछ याद आ रहा है या यह अपेक्षित व्यवहार है?

0

Aleksandar - यदि आप मैच को "\ ndb। * $" में बदलते हैं तो इसे काम करना चाहिए।

तो, कैरट

यदि आप exp_internal 1 चालू करने पर आप बफर देखेंगे कुछ इस तरह है: ":: 46 09 ls -1 db * \ r \ ndbupgrade.log \ r \ n08" (^) आपके पैटर्न मैच को फेंक देगा।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^