我使用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 [email protected]
#... 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
}
~~
}
什麼是這些特殊轉義序列之一的例子?我對基於tty的應用程序如何正確顯示有點陌生。另外,如果我的領域已經在屏幕上,並且只有在用戶觸發他們的操作以複製變量之後,我該如何「期待」我的領域?我猜這不可能預先確定該菜單的有用數據元素,並將它們預加載到變量中以供以後使用。例如, – jjclarkson 2010-01-01 15:19:00
有趣......對於我正在處理腳本的場景,會產生一個SSH會話(根據shell設置,ERP程序會在登錄時自動啓動,儘管登錄序列也由腳本自動完成),然後雙手控制用戶使用「交互」,但某些按鍵(如Ctrl + o(以及其他許多按鍵))會觸發某些自動過程,然後手動控制返回給用戶。光標控制不是必需的,只需要選擇某些字段併發送某些命令。 – jjclarkson 2010-01-01 18:24:58