2014-03-26 2 views
0

Я пытаюсь ssh в несколько систем (читай из файла test.txt), используя ожидание внутри скрипта оболочки и выполнение команд на каждом. Сценарий возвращает ошибку «неверное имя команды». Я использую set и ожидаю здесь неправильного пути?using set и ожидать в сценарии оболочки

#!/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 
} 

Ошибка возвращается

./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

Спасибо. Я пробовал с двойными кавычками, и ошибка больше не возникает. Однако сценарий по-прежнему запрашивает пароль. Результат возвращается, как показано ниже. - spawn 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

Как следует сообщение об ошибке, ожидать разобран ; как разделитель команд, и не мог справиться с pwd'.

Это потому, что в языке нет ни одной кавычки.

Ожидать является TCL, вы должны использовать двойные кавычки: "ls; pwd"

+1

+1. Чтобы подчеркнуть, одинарные кавычки не имеют смысла в Tcl. Эквивалентом одинарных кавычек оболочки являются фигурные скобки: '{ls; PWD} ' –

Смежные вопросы