2016-02-27 3 views
0

Я пытаюсь подключить устройство из telnet с командой expect в сценарии bash. То, что я хотел бы сделать что-то выглядит следующим образом:Когда telneting с ожиданием, как grep выходное слово в качестве следующей входной переменной команды через expect_out?

#!/usr/bin/expect -f 

    telnet_setup() 
{  sleep 10 
     expect <<EOF 
     spawn telnet $1 
     expect "Password:" 
     send "mypass\n" 
     expect "#" 
     send "my command to be run\n" 
     expect "Last number to be captured:" 
#Here the whole sentence to be captured something like: 
#Last number to be captured: 213124 
     set mynumber expect_out(buffer,0) | awk '{print $6}' 
     send "my next command with number $mynumber\" 
     expect "Correct number $mynumber is achieved!" 
     send "exit\n" 
EOF 

} 

Чтобы использовать эту функцию, я использую следующим образом:

telnet_setup 1.1.1.1 > file.txt 

Моя цель состоит в том, чтобы использовать эту функцию с $ MyNumber в будет использоваться в следующих командах. Можете ли вы предложить, как это сделать?

+1

Предполагается, что ваш shebang ожидает. Почему heredoc? –

ответ

2

У вас возникли проблемы с разделением кода ожидания из кода оболочки. Чтобы зафиксировать число, ожидайте регулярное выражение с скользящими круглыми скобками

send "my command to be run\r" 
    expect -re {Last number to be captured:\s+(\d+)} 
    set mynumber $expect_out(1,string)