摘要:于是拋出本文的主角,以實現(xiàn)一系列的自動化交互動作。簡介是一個免費(fèi)的編程工具,用來實現(xiàn)自動的交互式任務(wù),而無需人為干預(yù)。說白了,就是一套用來實現(xiàn)自動交互功能的軟件。而利用,則可以根據(jù)程序的提示,模擬標(biāo)準(zhǔn)輸入提供給程序,從而實現(xiàn)自動化交互執(zhí)行。
*寫在前面
最近開發(fā)的一個項目希望實現(xiàn)這樣一個功能。將本地項目創(chuàng)建腳手架置于遠(yuǎn)程服務(wù)器,而用戶需要創(chuàng)建項目時,僅需要在提供的頁面上填入一些項目基礎(chǔ)配置并提交,后臺便會根據(jù)選擇自動化創(chuàng)建項目并push上倉庫。
咋看是個非常簡單的需求,我們僅需要在用戶發(fā)起創(chuàng)建請求時在后端調(diào)取shell腳本并可以實現(xiàn)這一系列的操作。
然而目前項目創(chuàng)建腳手架不支持多參數(shù)傳遞,只能通過用戶輸入完成各參數(shù)傳遞的操作。
于是拋出本文的主角:Expect,以實現(xiàn)一系列的自動化交互動作。
expect是一個免費(fèi)的編程工具,用來實現(xiàn)自動的交互式任務(wù),而無需人為干預(yù)。說白了,expect就是一套用來實現(xiàn)自動交互功能的軟件。Expect命令在實際工作中,我們運(yùn)行命令、腳本或程序時,這些命令、腳本或程序都需要從終端輸入某些繼續(xù)運(yùn)行的指令,而這些輸入都需要人為的手工進(jìn)行。而利用expect,則可以根據(jù)程序的提示,模擬標(biāo)準(zhǔn)輸入提供給程序,從而實現(xiàn)自動化交互執(zhí)行。這就是expect!!!
使用expect時,首先需要在文件頂部寫入#!/usr/bin/expect,已告知進(jìn)程這是一個expect文件。而在腳本書寫中基本離不開以下這「六」個命令。
spawn 啟動新的進(jìn)程
expect 用來等待一個進(jìn)程的反饋,我們根據(jù)進(jìn)程的反饋,再發(fā)送對應(yīng)的交互命
send 發(fā)送需要交互的值,替代了用戶手動輸入內(nèi)容
set 設(shè)置變量值
expect eof 自動化結(jié)束
interact 退出自動化,進(jìn)入人工交互
Expect語法expect使用的是tcl語法,詳細(xì)教程可查閱TCL基本語法 - Tcl教程
這里提供幾個簡單的流程控制,一般來說已經(jīng)夠用了。
expect參數(shù)值存放在$argv中,比如取第一個參數(shù)就是[lindex $argv 0],以此類推。
// 執(zhí)行命令 xxx.sh mike 22 engineer #!/usr/bin/expect set name = [lindex $argv 0] set age = [lindex $argv 1] set job = [lindex $argv 2]if/else
if {$a == "a"} { set flag = 0 } else { set flag = 1 } expect "*請輸入xxx的值*" send $flag循環(huán)匹配
一般來說expect匹配成功會會退出語句,而exp_continue表示循環(huán)匹配。匹配到改關(guān)鍵字后繼續(xù)從頭開始匹配。例如安裝軟件時需要輸入多個 yes。
expect { "*yes/no*" { send "yes" exp_continue } eof { send "eof" } }栗子
未完待續(xù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109254.html
閱讀 1747·2021-10-18 13:30
閱讀 2639·2021-10-09 10:02
閱讀 2974·2021-09-28 09:35
閱讀 2101·2019-08-26 13:39
閱讀 3533·2019-08-26 13:36
閱讀 1961·2019-08-26 11:46
閱讀 1145·2019-08-23 14:56
閱讀 1704·2019-08-23 10:38