Я использую ожидаемый скрипт для взаимодействия с сеансом 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"
Буду благодарен за любые советы, касающиеся моей проблемы с ожиданием символа, а также с записью в той же строке.