[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > Shell > 正文
怎在一個 shell script 中或在背景執行 'ftp'、'telnet'等程序呢?
Steve Hayman (2001-04-19 11:27:47)
 這些程式要一個 terminal interface。這是shell 所無法提供的。所以這些 
 無法在 shell script 裡自動執行這些程式。 

 有一個就做 'expect' 的程式,可以用來做這件事,因為它提供了 
 programmable terminal interface。底下的例子是用 'expect' 來幫你 login: 

 # username is passed as 1st arg, password as 2nd 
 set password [index $argv 2] 
 spawn passwd [index $argv 1] 
 expect "*password:" 
 send "$password\r" 
 expect "*password:" 
 send "$password\r" 
 expect eof 

 expect 為 telnet, rlogin,debugger 和一些沒有內建 command language 的 
 程式提供了一個近乎自動化的方法。Expect 裡面的有一用以在玩 rogue 
 (一個 Unix 中的古老遊戲)時取得較佳初始情況,然將控制權還回給使用者 
 的例子。用這個 script 你就能得到『成功的一半』。 

 再者,有一些已經寫好的程式可以幫你這類與 pseudo-tty 有關的東西,所 
 以你只要?nbsp;script 中執行這些程式就可以幫你處理這些東西。 

 有兩個方法可以取得 'expect': 
 1.送一封 email 給 library@cme.nist.gov 內容就寫 "send 
 pub/expect/expect.shar.Z" 
 2. ftp://ftp.cme.nist.gov/pub/expect/expect.shar.Z 

 另一個做法是用一個就 pty 4.0 曾貼在 comp.sources.unix volume25的東 
 西。這個程式會提供一個 pseudo-tty session 給需要 tty 的程式用。若使用 
 named pipe 配合 pty 4.0 來做上例,則看起來可能如下: 

#!/bin/sh 
 /etc/mknod out.$$ p; exec 2>&1 
 ( exec 4 <&4 waitfor 'password:' 
 echo "$2" 
 <&4 waitfor 'password:' 
 echo "$2" 
 <&4 cat >/dev/null 
 ) | ( pty passwd "$1" >out.$$ ) 

 上面的 'waitfor' 是簡單的 C 程式,功用為等到 input 有與所等待的字串 
 相同時再往下做。 

 下面是一個更簡單的做法,不過缺點是與 'passwd' 程式的互動可能無法同 
 步。 

 #!/bin/sh 
 ( sleep 5; echo "$2"; sleep 5; echo "$2") | pty passwd "$1"  (http://www.fanqiang.com)
    進入【UNIX論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★