我正在尝试使用expect自动化交互式安装程序的屏幕输入,并希望使用循环通过答案文件的行作为部分安装程序的输入。
安装程序有几个部分,其中一些部分可以通过简单的期望/发送响应轻松处理。但是,安装程序中有一个部分循环询问数据,直到您按一个键完成输入。然后安装程序的其余部分继续。
循环部分在屏幕上显示如下:
SELECT CASE WHEN (LEN(field) >= 6 AND LEN(field) <= 10)
THEN field
ELSE '' END as 'YourField'
FROM nameoftable
上述部分期望脚本如下所示:
-------------------------------------------------------------------------------------------
Please enter ID details:
Please select an option: [A]dd [D]elete [I]mport [E]xport [F]inish =>A
Path: /opt/scanner/REF1/dump
ID: REF1
Please enter ID details:
Please select an option: [A]dd [D]elete [I]mport [E]xport [F]inish =>A
Path: /opt/scanner/REF2/dump
ID: REF2
Please select an option: [A]dd [D]elete [I]mport [E]xport [F]inish =>F
Rest of installer....
-------------------------------------------------------------------------------------------
请原谅我没有使用期望的冗长。这有效,但效率不高。
理想情况下,答案文件包含REF1,REF2,直到EOF(每行一个)和一个循环来读取每一行并发送到屏幕。
我已经看到了这个solution,但不确定这是如何与上述相符的。
我一直在玩这个可能形成解决方案的Tcl代码?
expect -exact "Please select an option: \[A\]dd \[D\]elete \[I\]mport \[E\]xport \[F\]inish =>"
send -- "A\r"
expect -exact "Path: "
send -- "/opt/scanner/REF1/dump"
expect -exact "/opt/scanner/REF1/dump"
send -- "\r"
expect -exact "Please select an option: \[A\]dd \[D\]elete \[I\]mport \[E\]xport \[F\]inish =>"
send -- "A\r"
expect -exact "Path: "
send -- "/opt/scanner/REF2/dump"
expect -exact "/opt/scanner/REF2/dump"
send -- "\r"
expect -exact "Please select an option: \[A\]dd \[D\]elete \[I\]mport \[E\]xport \[F\]inish =>"
send -- "F\r"
其中$ LINE是REF1,来自答案文件的REF2。
提前致谢。
答案 0 :(得分:0)
减少冗长的第一件事是:将提示放入变量;发送带有路径的回车。
set prompt "Please select an option: \[A\]dd \[D\]elete \[I\]mport \[E\]xport \[F\]inish =>"
expect -exact $prompt
send -- "A\r"
expect -exact "Path: "
send -- "/opt/scanner/REF1/dump\r"
expect -exact $prompt
send -- "A\r"
expect -exact "Path: "
send -- "/opt/scanner/REF2/dump\r"
send -- "\r"
expect -exact $prompt
send -- "F\r"
我们可以把它放到一个循环中,但它增加了一些复杂性
set refs [list "REF1" "REF2"]
set count 0
expect $prompt {
if {$count == 2} {
send -- "F\r"
} else {
send -- "A\r"
expect -exact "Path: "
set ref [lindex $refs $count]
send -- "/opt/scanner/$ref/dump\r"
incr count
exp_continue
}
}
exp_continue
命令&#34;循环&#34;回到&#34;外部&#34;期待命令。