我正在使用 Expect 与 SSH 会话和 ERP 程序进行自动交互。
与其依靠正则表达式来捕获我的期望脚本中的变量,是否有可能在接收到用户的某个击键后将屏幕区域(例如一个字段)捕获到代码中的变量中?向服务器发送一些其他命令并重新发送该字段?
假设订单号包含在 6、12、6、18(其中 6 是行,12-18 是列)包含我的 6 位订单号。我想从第 6 行第 12 到第 18 列中获取该订单号,并将其复制到一个变量中。然后允许用户进行更多交互(或期望移动到另一个菜单),然后在另一个菜单中重新发送订单号。
所以我想我的问题是:当前屏幕的内容是否在一个缓冲区中?(不是整个会话)您能否仅提取仅存在于屏幕上该行和列范围内的某个数据元素?
示例伪代码:
#!/usr/bin/expect -f
set env(TERM) vt100
spawn ssh -Y user@domain
#... set user/pass and other vars...
#... send commands to log into ERP
#don't time out
set timeout -1
interact {
-reset $CTRLZ {exec kill -STOP [pid]}
$CTRLA {
exp_send "menu_address\ry\r"
}
$CTRLO {
#...acquire order number variable...
#...some code I don't understand yet...
exp_send "menu_exit_sequence\r"
exp_send "menu_address\r"
exp_send $ordernumvar
}
~~
}