Как дождаться завершения процесса с помощью tcl-expect
Я пишу сценарий, используя expect, в котором я должен rlogin к некоторому хосту и после этого мне нужно отправить некоторые команды. Теперь я хочу выйти на этот хост и снова переключиться на какой-то другой хост и отправить несколько команд. Но запуск моего сценария не ждет, пока первый хост завершит свои задания и завершит работу, вместо этого он посылает другие команды между предыдущими процессами.
Как я могу добиться этого, используя ожидайте, пожалуйста, руководство?
Пример кода выглядит следующим образом:
#!/usr/local/bin/expect -f
spawn rlogin host1
expect "%"
send "source xyz.cshr"
send "exitr"
expect "%"
spawn rlogin host2
some set of commands
4 ответов:
Можете ли вы подробнее остановиться на " still script, отправляющем остальные команды между предыдущими процессами. "
Я попробовал это, и это сработало.
spawn ssh host1 expect ":" send pwd1 expect "%" send "echo hi\r" expect "%" send "exit\r" expect eof spawn ssh host2 expect ":" send pwd2
Вы забываете "нажать enter". После отправки exit, способ дождаться завершения процесса os
expect eof:send "source xyz.csh\r" expect "%" send "exit\r" expect eof
Попробуйте эту конструкцию, Когда
commandзанимает много времени:. . . send "command\r" expect { timeout { puts "Running..." exp_continue } "%PROMPT%" { puts "Finished." } } send "next command\r" . . .На
timeoutвы будете непрерывно ждать с командойexp_continueдля%PROMPT%.
Я нашел этот пост после того, как столкнулся с проблемой состояния гонки: иногда сценарий выполнялся так, как ожидалось, а в других случаях этого не произошло. добавление оператора
catchк сценарию обеспечивало желаемый результат каждый раз:[...] expect eof catch wait result
Comments