Использование сценария ожидаемого внутри запущенного сеанса Telnet - PullRequest
0 голосов
/ 01 апреля 2019

Я использую ожидаемый скрипт для взаимодействия с сеансом telnet, который начался ранее с bash.Скрипт не слушает символы в командной строке.Он просто отправляет команды после истечения времени ожидания.Я уверен, что я ввел правильный символ в expect (), потому что скрипт работает, когда я запускаю его в автономном режиме.

У меня есть список команд (1 команда в строке) для отправки в mikrotik.Мой ожидаемый скрипт помещает каждую команду в одну строку, а затем скрипт отправляет их.Я разделил команды с помощью ;, и это сработало, но только для короткой команды.Поэтому я решил разделить файл с командами на файлы меньшего размера.Затем я открываю сеанс telnet (в bash) и запускаю сценарий ожидающего, который открывает файлы меньшего размера и посылает команды снова и снова.Поэтому мне не нужно перезапускать одну и ту же сессию снова и снова.Проблема в том, что сценарий не отправляет команду, когда получает ожидаемый символ, но отправляет команды после истечения времени ожидания.

Это часть сценария bash.Это может быть проще, сделать весь сценарий в Expect, но я не добавил цикл, и если условие еще и когда я пытался создать какое-то время или структуру, я потерпел неудачу в нем.

        (
        echo open "12.12.13.44"
        sleep 2
        echo "admin+t"
        sleep 2
        echo "admin"
        sleep 2
        /usr/bin/expect /home/toor/expect2.sh
        ) | telnet

Здесь ожидается символ

expect "> "

, а здесь - часть сценария ожидающего, который помещает все команды в одну строку (без команды sleep 1, сценарий отправляет quitв середине чтения из файла)

set timeout 1
set fid [open /home/toor/file.txt]
set content [read $fid]
close $fid

set records [split $content "\r"]

foreach record $records {
   lassign $records \
         commands
   expect "> "
   send  "$commands\r"
}
sleep 1
expect "> "
send "quit\r"

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

1 Ответ

0 голосов
/ 01 апреля 2019

Вы отправляете вывод из expect в telnet; в этом сценарии expect не может получить информацию от процесса telnet.

Я бы подошел к этому как к цепочке expect сценариев - напишите один, который запускает сеанс, а затем передайте управление существующему сценарию.

...