expect介紹和使用


安裝

expect是建立在tcl基礎上的一個自動化交互套件, 在一些需要交互輸入指令的場景下, 可通過腳本設置自動進行交互通信. 其交互流程是:

spawn啟動指定進程 -> expect獲取指定關鍵字 -> send想指定進程發送指定指令 -> 執行完成, 退出.

由於expect是基於tcl的, 所以需要確保系統中安裝了tcl:

# 檢查是否安裝了tcl:
[root@localhost ~]# whereis tcl
tcl: /usr/lib64/tcl8.5 /usr/include/tcl.h /usr/share/tcl8.5

# 如果沒有安裝, 使用yum安裝tcl和expect:
[root@localhost ~]# yum install -y tcl
[root@localhost ~]# yum install -y expect

# 查看expect的安裝路徑:
[root@localhost ~]# command -v expect
/usr/bin/expect

mac端安裝expect

下載tcl,expect

配置tcl

sudo cp tcl8.4.20-src.tar.gz /usr/local/ &&
cd /usr/local/ &&
sudo tar -zxvf tcl8.4.20-src.tar.gz &&
cd tcl8.4.20 &&
cd unix &&
sudo ./configure --prefix=/usr/local/tcl --enable-shared &&
sudo make &&
sudo make install &&
sudo cp ./tclUnixPort.h ../generic/

安裝expect

sudo cp expect5.45.4.tar.gz /usr/local/ &&
cd /usr/local/ &&
sudo tar -zxvf expect5.45.4.tar.gz &&
cd expect5.45.4 &&
sudo ./configure --prefix=/usr/local/expect --with-tcl=/usr/local/tcl/lib --with-tclinclude=/usr/local/tcl8.4.20/generic &&
sudo make &&
sudo make install

expect常用命令

spawn	啟動新的交互進程, 后面跟命令或者指定程序
expect	從進程中接收信息, 如果匹配成功, 就執行expect后的動作
send	向進程發送字符串
send exp_send	用於發送指定的字符串信息
exp_continue	在expect中多次匹配就需要用到
send_user	用來打印輸出 相當於shell中的echo
interact	允許用戶交互
exit	退出expect腳本
eof	expect執行結束, 退出
set	定義變量
puts	輸出變量
set timeout	設置超時時間

參數選項

  • -c:執行腳本前先執行的命令,可多次使用。
  • -d:debug模式,可以在運行時輸出一些診斷信息,與在腳本開始處使用exp_internal 1相似。
  • -D:啟用交換調式器,可設一整數參數。
  • -f:從文件讀取命令,僅用於使用#!時。如果文件名為"-",則從stdin讀取(使用"./-"從文件名為-的文件讀取)。
  • -i:交互式輸入命令,使用"exit"或"EOF"退出輸入狀態。
  • --:標示選項結束(如果你需要傳遞與expect選項相似的參數給腳本時),可放到#!行:#!/usr/bin/expect --
  • -v:顯示expect版本信息。

四個命令

Expect中最關鍵的四個命令是send,expect,spawn,interact。

send:用於向進程發送字符串
expect:從進程接收字符串
spawn:啟動新的進程
interact:允許用戶交互

參考

expect(1)命令

教你如何在Linux中通過expect工具實現腳本的自動交互


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM