如何摆脱 expect: spawn id exp7 not open

how to get rid of expect: spawn id exp7 not open

我有一个生成进程的 expect 脚本。该过程很快结束,有时需要几秒钟。这是一个 SQL 查询。 我在脚本末尾尝试了不同的方法,但有时仍然会出现以下错误

预计:生成 ID exp7 未打开

尝试过的事情: 1.互动 2.期待eof 3. exp_continue 4.期待eof 捕获等待结果

让进程退出期望脚本的万无一失的方法是什么?

#!/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

这是你处理有条件期望的事情的方式:

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
}

最后一个期望命令会发现密码提示或进程结束,以先发生者为准。如果看到密码提示,则在该 expect 命令中使用 exp_continue 命令 "loops",以便您继续等待查看 eof。

请注意,我调整了 send 命令:您现在可以免受任何以连字符开头的密码的侵害。