![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 编程技术 > 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论坛】
|
|
| 相关文章 |
|
===更多相关=== |
|
|
 |
★ 樊强制作 欢迎分享 ★ |