как избавиться от ожидаемого: spawn id exp7 не открывается - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть сценарий ожидаемого запуска процесса. Процесс заканчивается быстро и иногда занимает несколько секунд. Это SQL запрос. Я пробовал разные вещи в конце скрипта, но все равно иногда получаю ошибку ниже

ожидаемо: spawn id exp7 не открыт

Попробовано: 1. взаимодействовать 2. ожидать eof 3. exp_continue 4. ожидайте, что вы получите результат ожидания улова

Какой надежный способ разрешить процессу и затем выйти из сценария ожидаемого?

#!/usr/local/bin/expect
###exp_internal -f debug_info.log 0;
set username [lindex $argv 0]
set firstname [lindex $argv 1]
set lastname [lindex $argv 2]
set mypassword [lindex $argv 3]
set userpassword [lindex $argv 4]
set LOG_FILE [open /home/applusr/e291505/logs/ADD.log a]
set today [ exec /bin/date +%Y-%m-%d-%T]
set ::env(sec) /home/root/admin
puts $LOG_FILE "\n------------------ADD_SCRIPT - $today----$username--$firstname--$lastname--$env(sec)-"
close $LOG_FILE
set timeout 10
log_user 0
log_file -a /home/applusr/e291505/logs/ADD.log
spawn $env(sec)/add.mims.user $username "$firstname $lastname"
set addID $spawn_id
expect  "e291505's Password:*" { send "$mypassword\n" }
expect  "$username's New password:*" { send "$userpassword\n" }
expect  "Enter the new password again:*" { send "$userpassword\n" }
expect  "Password:" { sleep 1; send "$mypassword\n" }
##interact

1 Ответ

0 голосов
/ 26 февраля 2020

Вот как вы обрабатываете вещи, которые ожидаются условно:

spawn $env(sec)/add.mims.user $username "$firstname $lastname"
set addID $spawn_id
expect  "e291505's Password:*"
send -- "$mypassword\n"
expect  "$username's New password:*" 
send -- "$userpassword\n"
expect  "Enter the new password again:*"
send -- "$userpassword\n"
expect {
    "Password:" { send -- "$mypassword\n"; exp_continue }
    eof
}

Последняя команда ожидания найдет запрос пароля или завершение процесса, в зависимости от того, что произойдет раньше. Если появляется запрос на ввод пароля, команда exp_continue «зацикливается» в этой ожидаемой команде, так что вы продолжаете ждать, чтобы увидеть eof.

Обратите внимание, что я настроил команды send: теперь вы защищены от любых паролей, начинающихся с дефиса.

...