2008-09-25 3 views
0

expect 스크립트를 작동 시키려고합니다. 정규 표현식 파싱을 호출하기 위해 -re 플래그를 사용하면 'timeout'키워드가 사용됩니다 더 이상 작동하지 않는 것 같습니다. 다음 스크립트를 실행하면 '1 단계에서 시간 초과되었습니다.'라는 메시지가 표시되고 '2 단계에서 시작'하고 시간이 초과되지만 '2 단계에서 시간 초과되었습니다'메시지가 표시되지 않습니다. 새 메시지가 나타납니다.expect 스크립트에서 '-re'플래그가 작동하지 않습니다.

아이디어가 있으십니까?

#!/usr/bin/expect -- 

spawn $env(SHELL) 
match_max 100000 

set timeout 2 

send "echo This will print timed out\r" 
expect { 
    timeout { puts "timed out at step 1" } 
    "foo " { puts "it said foo at step 1"} 
} 

puts "Starting test two\r" 

send "echo This will not print timed out\r" 
expect -re { 
    timeout { puts "timed out at step 2" ; exit } 
    "foo " { puts "it said foo at step 2"} 
} 

답변

2
Figured it out: 

expect { 
    timeout { puts "timed out at step 2" ; exit } 
    -re "foo " { puts "it said foo at step 2"} 
} 
2

예, 그것은 귀하의 질문에 표시되는 "- 재"플래그는 기대 명령의 모든 패턴에 적용됩니다. 따라서 "timeout"패턴은 "-re timeout"이되어 그 특수성을 잃습니다.

2

또한 "exp_internal 1"명령은 디버깅 도구로 매우 유용합니다.

관련 문제