2010-03-16 56 views
3

我有一個基於文本的菜單運行在遠程Linux主機上。我正在使用期望ssh到這個主機,並想弄清楚如何與菜單進行交互。交互涉及向上,向下箭頭鍵和使用回車鍵。例如,如何自動化測試基於文本的菜單

Disconnect 
Data Collection > 
Utilities > 
Save Changes 

當您進入系統Disconnect突出顯示。所以只需按兩次輸入即可斷開與系統的連接。第二個確認斷開。

下面的代碼將SSH入我的系統,並調出菜單。如果我刪除期望的eof並嘗試發送「\ r」以爲這會選擇Disconnect菜單選項,則會出現以下錯誤:「write()未能寫入任何內容 - 將會睡眠(1)並重試...」

#!/usr/bin/expect 
set env(TERM) vt100 

set password abc123 
set ipaddr 162.116.11.100 

set timeout -1 
match_max -d 100000 

spawn ssh [email protected]$ipaddr 
exp_internal 1 
expect "*password:*" 

send -- "$password\r" 
expect "Last login: *\r" 

expect eof 

我已經看過virterm和term_expect的例子,但無法弄清楚如何調整它們爲我工作。如果有人能指出我正確的方向,我將不勝感激。我需要知道的是,我可以與基於文本的菜單系統進行交互,以及執行此操作的正確方法是什麼,如果存在任何示例,示例會很棒。

感謝, -reagan

+0

你在什麼操作系統下運行這個代碼? – bta 2010-04-23 20:31:44

+0

你嘗試過產生一個shell而不是ssh。然後通過發送'ssh \ r'命令等來調用ssh。這就是我爲控制我的項目的集成測試的tmux所做的事情 – arainone 2016-03-20 00:50:08

回答

1

嘗試使用autoexpect工具來記錄一個交互式會話,並查看代碼是什麼樣子。

1

爲了簡化您的生活,您可能需要設置公用密鑰加密,以便您可以在不使用密碼的情況下ssh到遠程主機。然後你可以專注於測試你的軟件而不是ssh。谷歌「沒有密碼的ssh登錄」獲取更多信息。你會發現的指示是直接的,所以不要害怕。