2013-11-13 4 views
1

Я пытаюсь войти на удаленное устройство и записать его в файл. Я придумал этот код. Но в rez.txt файле я получаю строку «(буфер)»Ожидайте вывод записи в файл

Мой код очень простой - из инструкции, я не знаю, что это неправильно:

/usr/bin/expect << SSHLOGIN 

spawn ssh -l $user $host 

set timeout 100 

expect { 
"assword: " { 
     send "$password\r" 
     } 
} 
expect { 
">" { 
     send "?\r" 
     } 
} 
expect { 
"?" { 
     puts [open rez.txt w] $expect_out(buffer) 
     } 
} 

expect { 
">" { 
     send "exit\r" 
     } 
} 
SSHLOGIN 

ответ

0

режим соответствия по умолчанию ожидать является "glob" и ? - специальный персонаж-глобус. После того, как вы отправите «?», Когда ожидаете увидеть один символ, ваш выходной файл будет записан.

Если вы ожидаете ответа в другой номер ?, то вы хотите использовать точное соответствие:

expect -ex "?" { 
    puts [open rez.txt w] $expect_out(buffer) 
} 
+0

Я попытался изменить команду, например IFCONFIG, но выход на файл по-прежнему «(буфер)». Возможно, лучшим решением было бы написать все ожидаемые результаты в файл и удалить первые строки ... – sauletasmiestas

1

кажется, что вы вызываете ожидать в Баш скрипт.

$expect_out часть $expect_out(buffer) подставляется оболочкой. Поскольку $expect_out не установлено ни к чему, программа Ожидать на самом деле делает это:

puts [open rez.txt w] (buffer) 

Так что это в основном положить слово (buffer).

Чтобы это исправить, вам нужно бежать $expect_out так, что она не расширяется за счет оболочки и передается правильно ожидать, как это:

puts [open rez.txt w] \$expect_out(buffer) 
Смежные вопросы