一、Expect介绍及应用场景
Expect是一个用来实现自动交互功能的软件套 件(Expect [is a] software suite for automating interactive tools)。使用它系统管理 员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。
最近在研究Hadoop集群,在多台服务器相同的用户user下面,要登录到所有的服务器上执行一些相同的命令(修改一些配置文件,执行一些命令),如果ssh到不同的机子上去,一个个执行的话,人肉来做会疯掉的,所以通过expect写成shell脚本来批量处理,才是程序机器来干的事情。
二、Expect安装
下载的 expect-5.43.0.tar.gz 需要编译、安装,需要依赖tcl-devel,所以要先确认安装tcl相关包
1、首先检查tcl 安装情况
rpm -qa | grep tcl
结果显示如下: tcl-8.4.13-4.el5
tclx-8.4.0-5.fc6
结果表示已经安装了 tcl 但是没有安装tcl-devel 所以就要安装,之前没有查看操作系统位数,下了64位的tcl-devel包,安装错误
cat /proc/version
Linux version 2.6.18-194.el5 (mockbuild@x86-007.build.bos.RedHat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2- 48)) #1 SMP Tue Mar 16 21:52:43 EDT 2010
下载 tcl-devel-8.4.13-4.el5.i386.rpm 包,
CentOS_5/com/tcl-devel-8.4.13-4.el5.i386.rpm.html
安装 rpm -ivh tcl-devel-8.4.13-4.el5.i386.rpm
或者采用 yum install tcl-devel.i386
2、安装expect包
先要查看tcl开发包安装的位置
不同的系统的TCL安装目录不一样,解开expect-5.43.0.tar.gz 包,安装时需指定TCL的相关目录
--with-tclinclude 参数就是 tcl开发包的安装位置
./configure --with-tcl=/usr/lib --with-tclinclude=/usr/include/tcl-private/generic
make
make install
完成
3 . 编写脚本运行进运行出错:-bash: ./scm.sh: /bin/sh/expect: bad interpreter:
解决这个问题的办法是:修改文件头 :#!/usr/local/bin/expect