BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


奥运快报: 
奥运热点:
 

在背景执行 'ftp'、'telnet'等程序

首页 » 论坛 » Shell »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
蓝色键盘   帅哥
荣誉版主-精灵使



荣誉版主  
UID:43107
注册:2003-2-14
最后登录: 2006-12-12
帖子:4297
精华:56

可用积分:4362 (小富即安)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:北京海淀
状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2003-4-22 12:04 
这些程式要一个 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/dev/null 
 ) | ( pty passwd "$1" >out.$$ ) 

 上面的 'waitfor' 是简单的 C 程式,功用为等到 input 有与所等待的字串 
 相同时再往下做。 

 下面是一个更简单的做法,不过缺点是与 'passwd' 程式的互动可能无法同 
 步。 

 #!/bin/sh 
 ( sleep 5; echo "$2"; sleep 5; echo "$2") | pty passwd "$1" 



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘

首页 » 论坛 » Shell »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.055514 second(s), 4 queries , Gzip enabled