2013-11-26 7 views
1

expect for 루프가 작동하는 방식을 이해할 수 없습니다.Expect for 루프가 작동하지 않습니다.

나는 내 코드가 있습니다

j=0 
/usr/bin/expect << SSHLOGIN 
.......... 
    for {set $j 0} {$j < 5} {incr $j 1} { 
     expect { 
     "*> " { 
     send "$j\r" 
     sleep 1 
      } 
      } 
     } 
........... 
SSHLOGIN 

을 그리고 그것은 같은 오류를 얻을 : 나는 밖에 J를 선언하면

extra characters after close-brace 
    while executing 
"for {set j 0}{ < 5}{incr 1} { 
" 

. 루프는 0으로 붙어 반복됩니다. for 루프 내부에 대한 정보를 찾을 수 없습니다. 누가 그걸 시도 했습니까?

UPDATE : 선언 된 변수는 외부, 지금은

답변

2

기대 0에 무한한 시간을 루프하면은 Tcl 언어의 확장입니다. Tcl 문법은 매우 공백이다. incr command 변수 이름이 아닌 값을 기대하는 당신은 for 명령에

for {set j 0} {$j < 5} {incr j} { 
#............^........^ 

주를 인수 사이에 공백을 제공하지 않습니다.

Tcl의 작동 방식에 대해 자세히 알아 보려면 Tcl man page으로 시간을 보내십시오. 시간 가치가 있습니다.

또한 질문에 오류 메시지가 표시되어 $j이 사라졌습니다. 이런 쉘 스크립트에서 기대하는 것이 있습니까?

expect -c " ... your expect program here ..." 

예기치 않은 경우에도 기대치가 셸로 대체되지 않도록 보호해야한다는 점에 유의하십시오. 가능하면 작은 따옴표로 expect 프로그램을 둘러 쌉니다.


이를 수행합니다 히어 닥 터미네이터를 인용

/usr/bin/expect << 'SSHLOGIN' 

효과적으로 전체 히어 닥을 인용. 그렇지 않으면 셸은 $variables을 셸 변수 으로 대체하기 전에이 예상 한 프로그램을 전달합니다.

일부 Tcl 명령은 변수 의 이름이이 아닌 값을 사용합니다. j은 변수 이름입니다. $j은 값입니다. setincr은 두 가지 명령입니다. 작성해야합니다

for {set j 0} {$j < 5} {incr j 1} { 
# .......^....................^ 
#  no $    no $ 
+0

나는 내가 사용하는 방법으로 질문을 업데이 트했습니다. 공백이 도움이되지 않았습니다. 그러나 웹 페이지가 정말 도움이됩니다. 다른 방법으로 시도하는 중입니다. 알려 드리겠습니다. – sauletasmiestas

+0

이것은 다소 실망 스럽습니다. 나는 'expect -c "와 같은 결과를 얻는다." "foreach를 시도했지만 여전히 적절한 결과가 없습니다. ... – sauletasmiestas

+0

고마워요. 그런데 쉘 스크립트에서 몇 가지 변수를 추가하고 싶습니다. 조금 까다 롭습니다. 일부 명령이 이름을 사용한다는 생각은 내가 루프를 속이는 것을 도왔습니다. 'SSHLOGIN'과 같은 $ 변수에서 기대하는 부분을 닫는 대신. 방금 다음과 같은 루프를 작성했습니다. for {set j 0} {[incr j 0] <5} {incr j}'. 'incr'는 이름을 사용하고 바깥 쪽을 보지 않고 동일한 값을 반환합니다. – sauletasmiestas

관련 문제