免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1269 | 回复: 0
打印 上一主题 下一主题

在背景执行 'ftp'、'telnet'等程序 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-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" 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP