2012-12-12 47 views
3

我想運行一個腳本來連接到使用expect的Procurve 4204vl開關。 這是我創建的代碼:我運行這個使用簡單expect script.exp使用期望連接到通過ssh開關

#!/usr/bin/expect -f 
set timeout 20 
spawn ssh -l user 192.168.0.10 
expect "[email protected]'s password:" 
send "1234" 
send "\r" 
expect "Press any key to continue" 
send "j\r" 
send "conf" 
send "\r" 
send "no ip route 89.19.238.2 255.255.255.255 192.168.0.12" 
send "\r" 
send "exit" 
send "\r" 
send "exit" 
send "\r" 
send "exit" 
send "\r" 
expect "Do you want to log out [y/n]?" 
send "y" 

,問題是我得到了這些錯誤:

  1. 的路線不會被刪除
  2. 我得到了以下腳本執行完成後屏幕上出現錯誤:

    按下任意鍵可繼續執行無效命令名稱「y/n」 ,同時執行 「Y/N」 從 中調用 「期待 」是否要退出[Y/N]?「」 (文件 「script.exp」 第19行)

所以,怎麼可能我解決了這個問題? 謝謝。 PS:如果我對所有"exit"行和註銷問題發表評論,然後在"interact"命令中添加最後一行,該腳本可以正常工作。

回答

1

對於未刪除的路由,程序會給你什麼輸出?你看到路由器的任何錯誤嗎?

在expect和Tcl中,方括號是執行命令的語法,很像shell中的反引號。最簡單的解決方案是使用大括號代替雙引號,以防止命令插補:

expect {Do you want to log out [y/n]?} 

括號像在shell單引號。

+0

謝謝格倫,您的使用大括號的解決方案工作正常。 現在我完成劇本與這些行: 期待{你想退出[Y/N]?} 發送「Y」 這裏的問題是在這種情況下,我只應該按「Y」無需按「Enter」鍵。我試圖通過發送「y」來模擬它,但它不起作用。相反,我只是得到了「你......」這個問題,腳本停在那裏......幾秒鐘後腳本最終確定下來。 – Argie

+0

嘗試在發送「y」後添加'expect eof'' –

+0

humm,no,「expect eof」不能解決問題。 – Argie

0
send "logout\r" 
expect { 
    "Do you want to log out" { 
     send "yy" 
     exp_continue 
    } "Do you want to save current configuration" { 
     set result $expect_out(0,string); 
     puts "save..." 
     send "y" 
     puts "ok" 
    } eof { 
     puts "end of script" 
    } 
}