對於喜愛自動化的linux系統管理員而言,一定是用過expect這個命令列工具。expect 是由 don libes 基於 tcl 語言開發的,並被廣泛應用於互動式操作和自動化測試的場景之中,它尤其適用於需要對多台伺服器執行相同操作的環境中,可以大幅度提高系統管理人員的工作效率。本文是thegeekstuff.com最近更新的一篇技術分享文章,其中詳細講述了如何通過不同的命令列選項來執行乙個expect指令碼,具體有什麼用,大家可以自由發揮想象力。
本文假設您對expect的基本使用方法已經有一定的了解。
如果你是expect指令碼語言的新手,可以首先從我們的expect的「hello world」樣例(英文)開始。
1.用「-c」選項,從命令列執行expect指令碼
expect可以讓你使用「-c」選項,直接在命令列中執行它,如下所示:
$ expect -c 『expect 「/n」
pressed enter
$如果你執行了上面的指令碼,它會等待輸入換行符(/n)。按「enter」鍵以後,它會列印出「pressed enter」這個訊息,然後退出。
2.用「-i」選項互動地執行expect指令碼
使用「-i」選項,可以通過來自於標準輸入的讀命令來互動地執行expect指令碼。如下所示:
$ expect -i arg1 arg2 arg3
expect1.1》set argv
arg1 arg2 arg3
expect1.2》
正常情況下,當你執行上面的expect命令的時候(沒有「-i」選項),它會把arg1當成指令碼的檔名,所以「-i」選項可以讓指令碼把多個引數當成乙個連續的列表。
當你執行帶有「-c」選項的expect指令碼的時候,這個選項是十分有用的。因為預設情況下,expect是互動地執行的。
3.執行expect指令碼的時候,輸出除錯資訊
當你用「-d」選項執行**的時候,你可以輸出診斷的資訊。如下所示:
$ cat sample.exp
# !/usr/bin/expect -fexpect 「/n」;send 「pressed enter」;$ expect -d sample.expexpect version 5.43.0argv[0] = expect argv[1] = -d argv[2] = sample.expset argc 0set argv0 「sample.exp」set argv 「」executing commands from command file sample.exp
expect: does 「」 (spawn_id exp0) match glob pattern 「/n」? no
expect: does 「/n」 (spawn_id exp0) match glob pattern 「/n」? yes
expect: set expect_out(0,string) 「/n」
expect: set expect_out(spawn_id) 「exp0」
expect: set expect_out(buffer) 「/n」
send: sending 「pressed enter」 to
4.用「-d」選項啟動expect偵錯程式
「-d」選項用於啟動偵錯程式,它只接受乙個布林值的引數。這個引數表示提示器必須馬上啟動,還是只是初始化偵錯程式,以後再使用它。
$ expect -d 1 script
「-d」選項左邊的選項會在偵錯程式啟動以前被處理。然後,在偵錯程式啟動以後,剩下的命令才會被執行。
$ expect -c 』set timeout 10『 -d 1 -c 』set a 1『
1: set a 1
dbg1.0》
5.行地執行expect指令碼
通常,expect會在執行指令碼之前,把整個指令碼都讀入到記憶體中。「-b」選項可以讓expect一次只讀取指令碼中的一行。當你沒有寫完整個指令碼的時候,這是十分有用的,expect可以開始執行這個不完整的指令碼,並且,它可以避免把指令碼寫入到臨時檔案中。
$ expect -b
6.expect不解釋命令列引數
你可以使用識別符號讓expect不解釋命令列引數。
你可以像下面這樣的讀入命令列引數:
$ cat print_cmdline_args.exp
#!/usr/bin/expect
puts 』argv0 : [lindex $argv 0]『;
puts 』argv1 : [lindex $argv 1]『;
當執行上面的指令碼的時候,會跳過命令列選項,它們會被當成引數(而不是expect選項),如下所示:
$ expect print_cmdline_args.exp -d -c
argv0 : -d
argv1 : -c
在ABP中靈活使用AutoMapper
該文章是系列文章 基於.netcore和abp框架如何讓windows服務執行quartz定時作業 的其中一篇。最多遇到的場景,應該是介面返回的dto和資料庫entity,出於敏感資訊保護或者減少介面返回資料等等的原因,dto返回的屬性或者字段有所刪減,也就是說需要對映的屬性或者字段屬性名稱一致。d...
在Linux下使用ADSL
文章標題 在linux下使用adsl 程軍傑 張貼者 admin enthusiast 張貼日期 04 06 02 02 12 am 原文章發布於 2001.8.24 by 程軍傑 本站會員 北京電信的adsl使用的是pppoe撥號方式,因此,要在linux下使用adsl,必須安裝pppoe 客戶端...
在Linux下使用ADSL
北京電信的adsl使用的是pppoe撥號方式,因此,要在linux下使用adsl,必須安裝pppoe客戶端軟體。下面說明如何進行安裝 本文以redhat linux 6.2為實驗平台,其它平台的linux安裝辦法可以參照下面從源 進行安裝的步驟。一 安裝的前提條件 1.確保安裝了網絡卡並工作正常 使...