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論壇】
|
|
| 相關文章 |
|
====== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |