shell expect使用方法
Expect的作者Don Libes在1990年開始編寫Expect時對Expect做有如下定義:Expect是一個用來實現自動交互功能的軟件套件(Expect [is a] software suite for automating interactive tools)。使用它系統管理員的可以創建腳本用來實現對命令或程序提供輸入,而這些命令和程序是期望從終端(terminal)得到輸入,一般來說這些輸入都需要手工輸入進行的。Expect則可以根據程序的提示模擬標准輸入提供給程序需要的輸入來實現交互程序執行。甚至可以實現實現簡單的BBS聊天機器人。
Expect是不斷發展的,隨著時間的流逝,其功能越來越強大,已經成為系統管理員的的一個強大助手。Expect需要Tcl編程語言的支持,要在系統上運行Expect必須首先安裝Tcl。
從最簡單的層次來說,Expect的工作方式象一個通用化的Chat腳本工具。Chat腳本最早用於UUCP網絡內,以用來實現計算機之間需要建立連接時進行特定的登錄會話的自動化。spawn命令來啟動腳本和命令,Chat腳本由一系列expect-send對組成:expect等待輸出中輸出特定的字符,通常是一個提示符,然後發送特定的響應。
set timeout設置腳本等Shell返回與expect指定的模式匹配的字符串的時間,如果匹配成功則立即繼續執行,如果匹配不到就會阻塞,在超出timeout指定的時間後才繼續執行。
timeout默認是10s,如果設置為-1,腳本就要永遠等下去。
一個簡單的例子,用於自動輸入kerberos密碼:
[cpp]
#!/usr/bin/expect
#source /home/rank/.bash_profile
set timeout 10
spawn /usr/bin/kinit can.yu
expect "*OPI.COM*"
send "111111\r"
expect eof