Я пытаюсь автоматизировать ввод с экрана интерактивного установщика, используя ожидаемое, и хотел бы использовать цикл, который циклически перебирает строки файла ответов в качестве входных данных для части установщика.
Программа установки имеет несколько разделов, некоторые из которых легко обрабатываются простыми ответами «ожидаем / отправляем». Однако в установщике есть раздел, который повторяет запрос данных, пока вы не нажмете клавишу для завершения ввода. Затем остальная часть установщика продолжается.
Секция зацикливания выглядит на экране следующим образом:
-------------------------------------------------------------------------------------------
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....
-------------------------------------------------------------------------------------------
Часть моего ожидаемого сценария для вышеупомянутого выглядит следующим образом:
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"
Пожалуйста, извините за многословие, поскольку я не использовал ожидание долго. Это работает, но не очень эффективно.
В идеале файл ответов содержит REF1, REF2 до EOF (по одному на строку) и цикл для чтения каждой строки и отправки на экран.
Я видел это решение , но не уверен, как это согласуется с вышеприведенным.
Я играл с этим кодом Tcl, который может сформировать решение?
puts "/opt/scanner/$LINE/dump"
puts "$LINE"
Где $ LINE - REF1, REF2 из файла ответов.
Заранее спасибо.