2013-08-30 72 views
1

我正試圖連接到交換機,它是信令點交換機。使用Expect模塊的Telnet會話無法發送命令ctrl + A

我需要執行以下命令才能登錄終端。

  1. 遠程登錄IP端口
  2. 發送Ctrl + A
  3. 獲取提示 「>」
  4. 發送命令登錄:UID =用戶。
  5. 請求密碼提供密碼。
  6. 獲取終端「>」

然後,我必須繼續執行某些命令走得更遠,但我的問題我現在面臨一個問題,在發送CTRL + A。

當我發送使用期望「ctrl + A」它只是打印「^ A」,並等待不提供我的終端。

因此,我修改了腳本,將命令更改爲「ctrl + A \ n」,它給了我終端,但在我的下一個終端提示符處添加了新行。

像下面的輸出:

^A 
^A 
^A 

> 

wait's here at next line. 

這不符合我的下一個命令的正則表達式「>」和不發送的登錄名。

有人可以告訴我爲什麼我的第一個命令「^ A」無法讓我終端?爲什麼命令在我拿到終端之前執行了三次?

我手動場景,它工作正常進行單獨的CTRL + A

我的示例代碼:

use Expect; 

my $exp = Expect->spawn("telnet 10.10.1.35 2020"); 

$exp->expect($timeout, 
       [ qr/]'./ => sub {my $exp = shift; 
            $exp->send("\cA\n"); 
             } ] 
); 
$exp->expect($timeout, 
       [ qr/>/ => sub { my $exp = shift; 
            $exp->send("login:uid=user\n"); 
             } ] 
); 
$exp->expect($timeout, 
       [ qr/Enter Password :/ => sub { my $exp = shift; 
            $exp->send("xxx\n"); 
             } ] 
); 

謝謝 普拉迪普。

+0

嘗試'$ EXP->發(CHR(1));'發送按Ctrl-A –

+0

我ctrl + A角色,它並沒有進一步移動,它只是在等待。 – user2733721

回答

0

嘗試send "\01"

更多信息 http://expect.sourceforge.net/FAQ.html#q54

我想從字面上進入大多數控制字符,請諮詢 - 因爲生成的腳本更具可讀性。但是,你的編輯必須允許這個。例如,假設你想發送一個Control-A。通常情況下,大多數編輯器顯示爲^ A,但不能輸入^和A.(這隻會發送這兩個字符)。大多數編輯器都有一些簡單的引用機制,可以讓您直接輸入下一個字符。例如,使用emacs,我可以輸入^ Q^A並添加單個字符^ A。

或者,Tcl提供了一種使用八進制或十六進制編碼的方法。八進制編碼機制比十六進制更容易出錯,所以我將演示使用八進制。例如,由於^ A在ASCII八進制值1,發送^ A:

send "\01" 
相關問題