用expect(TCL)實現Linux下的互動

2021-06-03 02:26:16 字數 1182 閱讀 9344

現代的shell對程式提供了最小限度的控制(開始,停止,等等),而把互動的特性留給了使用者。 這意味著有些程式,你不能非互動的執行,比如說passwd。 有一些程式可以非互動的執行,但在很大程度上喪失了靈活性,比如說su,ssh等。這表明linux的工具構造邏輯開始出現問題。expect恰恰填補了 其中的一些裂痕,解決了在linux環境中長期存在著的一些問題。

expect是基於tcl的,作為乙個指令碼語言,expect能在無需管理員參與的情況下實現自動互動(比如passwd,fsck,telnet等),expect也能用於自動測試一些應用程式。

expect的語法和shell的語法非常相似,它支援函式呼叫,有while語句,switch語句。

1) expect使用spawn呼叫其他的執行程式,比如

spawn telnet 218.199.20.98 2600

但是在使用的過程中發現spawn不支援管道和重定向,也就是說對於

ls |more ; mysql -p < update.sql 這樣的命令spawn不能正確解析。

解決的辦法是把這些命令放到乙個shell指令碼裡面,在用spawn執行這個shell指令碼。

2) expect 建立子函式使用proc標誌,也即:

proc functionname

呼叫子函式非常簡單

functionname $param1 $param2

3) expect 使用expect ,send 組合實現自動互動 ,語法如下:

expect

"passwd:"

}使用send的使用後面的內容不顯示給使用者,如要顯示給使用者,應使用send_user

4) 注意點:

1. expect裡面基本是都是使用{} 而不是使用(),比如函式引數輸入外面應用{},

應該是while 而不是 while ( ).

2.

eof }}

}if

set pass [lindex $argv 0]

spawn /tmp/ss

do_console_login $pass

注意:/tmp/ss是重新寫的乙個指令碼,因為spawn不能識別帶引數的命令。其內容如下:

/bin/su - $user -c "/bin/ls /home/$user"

呼叫方法是: expect exp_su.sh 123456(即密碼)

用vnc實現windows遠端連線linux桌面

網路遙控技術是指由一部計算機 主控端 去控制另一部計算機 被控端 而且當主控端在控制端時,就如同使用者親自坐在被控端前操作一樣,可以執行被控端的應用程式,及使用被控端的系統資源。vnc virtual network computing 是一套由at t實驗室所開發的可操控遠端的計算機的軟體,其採用...

利用shell程式設計實現DOS風格的Linux命令列

如果你是習慣於windows命令提示符的it人,當你第一次使用linux命令行時,一定會感到無所適從。你所熟悉的dos命令再linux中基本不存在。擺在你面前的是一大堆要記背的命令。一種替代方案是利用強大的linux外殼命令編寫shell指令碼,讓你在linux下也能用dos命令。下面告訴你怎麼做。...

用PPA安裝fcitx和搜狗輸入法Linux版

準備工作 解除安裝ubuntu預設的ibus輸入法 sudo apt get remove ibus 一 方法1。首先新增fcitx的nightlyppa 在源中新增nightly源 sudo gedit etc apt sources.list 加入以下兩行 deb quantal main de...