热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>Shell开发>

怎么在一个 shell script 中或在背景执行 'ftp'、'telnet'等程序呢?

来源: 作者: 时间:2007-01-27 Tag: 点击:

  这些程式要一个 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" 


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册