expect安装和使用需要注意的几个问题(转)

来源:互联网 发布:java的脚本语言 编辑:程序博客网 时间:2024/06/05 16:17

从远程服务器拷贝数据文件到指定的服务器上,估计是需要同学都遇到过的问题。scp 和rsync 都可以实现,rsync俺还没玩过,不过应该也比较简单吧。如果用scp来实现自动拷贝文件,但是需要用户来输入的密码,否则无法实现,怎么办?听说expect可以解决这个问题。

1。首先确认expect的包是否安装。

[root@lamp100 opt]$ rpm -qa | grep expect

如果没有则需要下载安装,可以参考:

编译安装:http://www.lamp100.com/333

rpm安装:expect-5.42.1-1.x86_64.rpm 和 expect-devel-5.42.1-1.x86_64.rpm 这个安装相对简单些

rpm下载地址:

http://mirrors.163.com/centos/5/os/i386/CentOS/

http://mirrors.163.com/centos/5/os/x86_64/CentOS/

安装过后会显示:

[root@lamp100 opt]$ rpm -qa | grep expect

expect-5.43.0-5.1
expect-devel-5.42.1-1

2.查看expect的路径,可以用

[root@lamp100 opt]$ which expect

/usr/bin/expect

[root@lamp100 opt]$ vim auto_cp_data.sh

3。确定脚本有可执行权限

chmod +x auto_cp_data.sh

view source
print?
1#!/usr/bin/expect  //这个expect的路径就是用which expect 查看的结果
2 
3set date [execdate "+%y_%m_%d"]
4 
5spawn scproot@10.3.32.57:/opt/htdocs/search_data/"$date"_raw_food.xml /opt/sourcedata/
6 
7expect "password:" //匹配password
8 
9send "123456\r"//发送密码
10 
11interact  //执行完毕

另外需要注意的是:

不能按照习惯来用sh auto_cp_data.sh来这行expect的程序,会提示找不到命令,如下:

auto_cp_data.sh: line 3: spawn: command not found
couldn’t read file “password:”: no such file or directory
auto_cp_data.sh: line 5: send: command not found
auto_cp_data.sh: line 6: interact: command not found

因为expect用的不是bash所以会报错。执行的时候直接./auto_cp_data.sh就可以了。~切记!

参考链接:http://blog.csdn.net/zhuying_linux/article/details/6657020

原创粉丝点击