expect的简单应用
先看3个脚本:
1.创建用户:1.createUser.sh
#!/usr/local/bin/expect ##!/usr/bin/expect set timeout 1 #spawn userdel -r hao spawn useradd hao spawn passwd hao expect "新的 密码:" send "hao\r" expect "重新输入新的 密码:" send "hao\r" #spwawn id spawn ssh localuser@192.168.77.80 expect "localuser@192.168.77.80's password:" exec sleep 1 send "123\r" interact
2.登陆普通用户:2.login.sh
#!/usr/local/bin/expect ##!/usr/bin/expect set timeout 1 #spawn su - a spawn ssh hao@192.168.77.80 expect "hao@192.168.77.80's password:" exec sleep 1 send "hao\r" #spawn cd /root/AT_EInfoworks/svn/components #spawn /root/AT_EInfoworks/svn/components/su_target.sh #expect "$" #echo who interact
3.切换其他用户:su_localuser.sh
#!/usr/local/bin/expect set timeout 1 spawn su localuser expect "密码:" sleep 1 send "123\r" expect "$" interact
实现了:创建一个普通用户,有普通用户切换到另外一个普通用户的功能。
附:linux下安装expect
见:http://blog.csdn.net/wind19/article/details/4905453
expect的主页:http://expect.nist.gov/
最新稳定版5.43.0的下载地址:http://expect.nist.gov/expect.tar.gz
expect依赖于tcl/tk,因此在安装expect之前先安装tcl/tk。
tcl/tk8.4.16的下载面页:
http://www.tcl.tk/software/tcltk/downloadnow84.html
软件包的下载地址:
http://prdownloads.sourceforge.net/tcl/tcl8.4.16-src.tar.gz
http://prdownloads.sourceforge.net/tcl/tk8.4.16-src.tar.gz
检查系统,看tcl是否已经安装。
[root@rhel ~]# rpm -qa|grep tcl
已经安装的情况:
因为expect需要重新编译后安装,那么就需要tcl的开发包。
rpm -ivh --force tcl-devel-8.4.13-3.fc6.i386.rpm
然后将expect-5.43包解开,开始读INSTALL文档,系统管理员告诉我,不用读,直接运行 ./configure --help开参数。确实好使,又土了一次 :-( 。
1.首先确定tcl开发包安装的位置
rpm -qpl tcl-devel-8.4.13-3.fc6.i386.rpm|more
2.然后根据参数,运行./configure
./configure --with-tcl=/usr/lib --with-tclinclude=/usr/include/tcl-private/generic
3.执行
make
4.执行
make install
完成第四步后,expect顺利安装成功。 -
没有安装的情况:
第一步,安装tcl
[root@supersun.biz download]#cd tcl8.4.16/unix/
./configure
make
make install
安装之后不要删除源码包,在安装expect时需要tcl的头文件。
安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中
第二步,安装tk
[root@supersun.biz download]#cd tk8.4.16/unix/
./configure
make
make install
第三步,安装expect
在不提供参数的情况下执行configure报错:
checking for Tcl private headers... checking for tclInt.h... no
configure: error: Can't find Tcl private headers
再次运行configure脚本,并指定tcl的头文件所在目录:
[root@supersun.biz expect-5.43]#./configure --with-tclinclude=../tcl8.4.16/generic
脚本运行正常,进行执行make进行编译
make
如果make,或是configure有错误的话,根据提示,再增加配置参数
编译过程中未出现错误,执行安装:
make install
配置参数的意思是:
· --with-tcl=/usr/tcl/lib :(我的环境中是/usr/local/lib) 确保配置脚本找到临时工具目录中的Tcl ,我们不希望它使用主系统中可能存在的tcl.
· --with-x=no : 告诉配置脚本,不要查找 Tk (Tcl 的 GUI 组件) 或 X 窗口系统库,这两个都有可能存在于主系统中。
· -with-tclinclude :帮助脚本找到所需要的tcl 头文件。
简单一点就是:
1.安装tcl8.4.16
cd tcl8.4.16/unix/ ./configure;make;make install
cp tclUnixPort.h ../generic/
2.安装tk
cd tk8.4.16/unix
./configure;make;make install
3.安装expect
./configure --with-tclinclude=../tcl8.4.16/generic; make;make install

赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?