2014-03-26 5 views
0

쉘 스크립트 내에서 expect를 사용하여 몇 가지 시스템 (test.txt 파일에서 읽음)으로 ssh를 시도하고 각각에 명령을 실행하려고합니다. 스크립트가 "invalid command name"오류를 반환합니다. 나는 세트를 사용하고 있으며 잘못된 방식으로 여기에 기대합니까?쉘 스크립트에서 set과 expect를 사용하여

#!/usr/bin/expect -f 
set username "root" 
set pass "mypassword" 
set fd [open /home/test.txt r] 
set host [read $fd] 
foreach line $host { 
    ssh -o StrictHostKeyChecking=no -n [email protected]$host 'ls; pwd' 
     expect "User:" { send "${username}\r" } 
     expect "root's Password:" { send "${pass}\r" } 
     expect eof 
} 

오류는 오류 메시지에서 알 수 있듯이, 명령 구분자로 ; 분석 기대하고 pwd'를 처리 할 수 ​​

./expect.sh 
spawn ssh -o StrictHostKeyChecking=no -n [email protected] 
10.1.1.2 

'ls 
invalid command name "pwd'" 
    while executing 
"pwd' " 
    ("foreach" body line 3) 
    invoked from within 
"foreach line $host { 
+0

감사합니다. 내가 큰 따옴표로 시도하고 오류가 더 이상 발생하지 않습니다 .. 그러나 스크립트는 여전히 비밀 번호를 묻는 메시지가 나타납니다 .. 반환 된 출력은 아래와 같습니다. - 생성 ssh -o StrictHostKeyChecking = no -n [email protected] 10.1.1.2 ls; pwd 경고 : 알려진 호스트 목록에 '10 .1.1.1 10.1.1.2 '(RSA)이 추가되었습니다. [email protected] 10.1.1.2 – user3331975

답변

1

를 반환했습니다.

언어에 작은 따옴표로 묶인 문자열이 없기 때문입니다.

Expect는 tcl입니다. 큰 따옴표를 사용해야합니다. "ls; pwd"

+1

+1. 강조하기 위해 작은 따옴표는 Tcl에서는 의미가 없습니다. 쉘의 작은 따옴표에 해당하는 것은 중괄호입니다 :'{ls; pwd}' –

관련 문제