2012-06-15 11 views
6

Aşağıdaki Regexp'i kullanarak DEF_23 eşleştirmek isterseniz:

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

o dizide böyle bir eleman diyor neden? bu $ expect_out nasıl çalışır? ve sonucu DEF olarak atamak istiyorsam, DEF'yi regexp kullanarak nasıl alabilir ve değişken sonuca nasıl atayabilirim?

+1

"Set" satırında ekstra parantez var mı demek istediniz? Aksi halde 'beklemek' gerçekten çok garip bir kullanım… –

cevap

9

expect_out(0,string) modelini arıyorsunuz - normal ifadenizde parantezleri yakaladıysanız dizi öğesi 1,string doldurulur. (Veya eof veya full_buffer), eşleşen ve daha önce eşsiz çıkış kaydedilir bir desen eşleştirme üzerine

:

expect manpage

ait belgelerinde expect_out kullanımı komutu bekliyoruz belgeler değişken expect_out (tampon). 9 regexp alt dizgi eşleşmeleri (1, string) - - demand_out (9, string) değişkenlerine kaydedilir. -indices bayrak 10 şeritler değişken expect_out depolanır arasında (lrange için uygun bir formda), bir kalıp, başlangıç ​​ve bitiş endeksleri önce kullanılırsa (X ve expect_out (X, başlangıç) , son) burada X bir rakamdır, tampondaki alt dizgi konumuna karşılık gelir. Şekil 0, tüm modeli eşleştiren ve yeniden şekillendirme kalıplarının yanı sıra küre desenleri için üretilen dizeleri belirtmektedir.

Manpage'de örnek bir örnek var.

1

Yukarıdaki açıklamanın kesin olmadığı anlaşılıyor! Bu örnek kontrol : $ expect_out (1, dizge) ya da $ expect_out (tampon) kullanıldığında

$ 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) 
$ 

test sonucu aynıdır. Bir şey mi eksik ya da beklenen davranış bu mu?

0

Aleksandar - Bu eşleşmeyi "\ ndb. * $" Olarak değiştirirseniz çalışır.

Eğer exp_internal 1 açarsanız size tampon göreceksiniz böyle bir şey içeriyor: "ls -1 db * \ r \ ndbupgrade.log \ r \ N08: 46: 09"

Yani, şapka (^) desen eşleştirmeyi atar.