linux expect spawn的用法
expect介绍
借助Expect处理交互的命令,可以将交互 过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成.尤其适用于需 要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率
expect安装
[root@docker-01 ~]# yum -y install expect
expect 语法
expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 选项 -c:从命令行执行expect脚本,默认expect是交互地执行的 示例:expect -c 'expect "\n" {send "pressed enter\n"} -d:可以输出输出调试信息 示例:expect -d ssh.exp expect中相关命令 spawn:启动新的进程 send:用于向进程发送字符串 expect:从进程接收字符串 interact:允许用户交互 exp_continue 匹配多个字符串在执行动作后加此命令 expect最常用的语法(tcl语言:模式-动作) 单一分支模式语法: expect “hi” {send “You said hi\n"} 匹配到hi后,会输出“you said hi”,并换行 多分支模式语法: expect "hi" { send "You said hi\n" } \ "hehe" { send “Hehe yourself\n" } \ "bye" { send “Good bye\n" } 匹配hi,hello,bye任意字符串时,执行相应输出.等同如下: expect { "hi" { send "You said hi\n"} "hehe" { send "Hehe yourself\n"} "bye" { send “Good bye\n"} }
自动拷贝文件到远程主机
执行expect 不能以bash file 的方式来执行 (开启一个子shell进程) 必须通过 chmod +x file ./file 这样的方式 (不会开启子shell进程,只在当前shell环境中执行) expect 如果只交互一次如拷贝文件 结尾就使用 expect eof 如果需要连续交互如登录远程主机执行各种命令结尾就需使用 interact
[root@docker-01 ~]# cat login #!/usr/bin/expect set timeout 30 spawn ssh root@192.168.1.221 expect "*password:" send "123456\n" expect "#" send "systemctl restart docker\n" expect eof
解释: 1.#!/usr/bin/expect :需要先安装软件,然后来说明用expect来执行 2.spawn ssh root@192.168.1.221 :spawn是进入expect环境后才可以执行的expect内部命令,用来执行它后面的命令。 3.expect "*password:" :也是expect的内部命令,用来解惑关键的字符串,如果有,就会立即返回下面设置的内容,如果没有就看是否设置了超时时间。 4.send "123456\n":这时执行交互式动作,与手工输入密码等效,在expect截获关键字之后,它就会输入send后面的内容。 5.interact :执行完毕后把持交互状态,把控制台,这时候就可以进行你想要进行的操作了。如果没有这一句,在登陆完成之后就会退出,而不是留在远程终端上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?