- expect介绍
expect时用与提供自动交互的工具(工作需要telnet/ssh自动登录远程设备并进行一些固定操作)。比如如果想要用ssh登陆服务器,每次都输入密码你觉得麻烦,那你就可以使用expect来做自动交互,这样的话就不用每次都输入密码了。
先看例子:
#!/usr/bin/expect #set timeout 20 #设置超时时间 spawn ssh [email protected] expect "*password:" send "123\r"# expect "*#" interact |
解释:
1.#!/usr/bin/expect :需要先安装软件,然后来说明用expect来执行
2.spawn ssh [email protected] :spawn是进入expect环境后才可以执行的expect内部命令,用来执行它后面的命令。
3.expect "*password:" :也是expect的内部命令,用来解惑关键的字符串,如果有,就会立即返回下面设置的内容,如果没有就看是否设置了超时时间。
4.send "123\r":这时执行交互式动作,与手工输入密码等效,在expect截获关键字之后,它就会输入send后面的内容。
5.interact :执行完毕后把持交互状态,把控制台,这时候就可以进行你想要进行的操作了。如果没有这一句,在登陆完成之后就会退出,而不是留在远程终端上。
2.源码下载
expect5.45.3.tar.gz:
https://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
tcl8.6.8-src.tar.gz:
http://tcl.sourceforge.net/
也可以从CSDN下载。
新建目录soft,将下载的expect5.45.3.tar.gz、tcl8.6.8-src.tar.gz放在soft目录下。
3.交叉编译TCL
由于expect是基于tcl语言的,所以移植expect前,需先交叉编译tcl。
[email protected]:/home/hanyang/soft# tar zxf tcl8.6.8-src.tar.gz
[email protected]:/home/hanyang/soft# mkdir install_tcl
[email protected]:/home/hanyang/soft# cd tcl8.6.8/unix/
注意,/configure …… 之前应该先:
[email protected]:export tcl_cv_strtod_buggy=1
[email protected]:export ac_cv_func_strtod=yes
否则,交叉编译tcl时会出现以下错误(普通编译无此错误)
fixstrtod.o: In function `fixstrtod':
fixstrtod.c:(.text+0x0): multiple definition of `fixstrtod'
strtod.o:strtod.c:(.text+0x0): first defined here
[email protected]:/home/hanyang/soft/tcl8.6.8/unix#export CC=/home/hanyang/BRD_BSP_Version/export/brd_bsp/tools/ppc_gcc4.8.2_glibc2.18.0_multi/bin/ppce6500-hardfloat-linux-gnu-gcc
[email protected]:/home/hanyang/soft/tcl8.6.8/unix#
./configure --prefix=/home/hanyang/soft/install_tcl/ --host=powerpc
生成Makefile
(configure时留意一下是否有这句话,没有的话可能有问题checking for powerpc-gcc... /home/hanyang/BRD_BSP_Version/export/brd_bsp/tools/ppc_gcc4.8.2_glibc2.18.0_multi/bin/ppce6500-hardfloat-linux-gnu-gcc
)
[email protected]:/home/hanyang/soft/tcl8.6.8/unix# make
[email protected]:/home/hanyang/soft/tcl8.6.8/unix# make install
在/home/hanyang/soft/install_tcl/lib路径下获取libtcl8.6.so和tcl8.6文件夹。
(file libtcl8.6.so 看一下是否是交叉编译运行在PowerPC下的 。)
4.编译expect
[email protected]:/home/hanyang/soft# tar zxf expect5.45.3.tar.gz
注意,expect不支持交叉编译,所以在configure,需要先用默认的X86 gcc编译,等configure后再修改Makefile
[email protected]:/home/hanyang/soft/expect5.45.3# ./configure \
--prefix=/home/hanyang/soft/install_expect/ \
--with-tcl=/home/hanyang/soft/install_tcl/lib \
--with-x=no \
--with-tclinclude=/home/hanyang/soft/install_tcl/include \
1)--prefix=/home/hanyang/soft/install_expect/:指定安装目录
2)--with-tcl=/home/hanyang/soft/install_tcl/lib:指定tcl所在目录,通常指定为tcl安装目录下的lib路径
3)--with-x=no: 告诉配置脚本,不要查找 tk (tcl 的 GUI 组件) 或 X 窗口系统库
4)--with-tclinclude=/home/hanyang/soft/install_tcl/include:指定tcl头文件所在目录,通常指定为tcl安装目录下的include路径
(检查打印信息checking for gcc... gcc)
生成Makefile后,修改
CC=/../../ppce6500-hardfloat-linux-gnu-gcc
AR=/../../ppce6500-hardfloat-linux-gnu-ar
[email protected]:/home/hanyang/soft/expect5.45.3# make
[email protected]:/home/hanyang/soft/expect5.45.3# make install
make install会出现错误,可以不管,只要能正常编译生成expect和libexpect5.45.so即可
编译生成libexpect5.45.3.so、expect,file看一下是否是运行在PowerPC平台上的。
5.移植
expect -------------\usr\local\bin
libexpect5.45.3.so、libtcl8.6.so-------------\lib
tcl8.6 ------------\usr\lib
调用expect,进入expect环境,说明安装成功。