ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux交互工具expect

2021-11-18 18:34:16  阅读:189  来源: 互联网

标签:spawn PASSWD send expect Linux yes 交互


应用场景:一个终端shell脚本实现多台主机自动部署。无需人为干预。

expect是一个自动交互功能的工具。可以在主机切换时【即需要交互操作时】,利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。

实例:

PASSWD=xxx

for host in $@
do
CMD="ssh $host"
expect -c "
set timeout 20;      #超时时间。默认10s。防止那些执行死机的命令的。一旦到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行。
spawn $CMD
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}        #匹配到*yes/no*,输入yes
\"*password*\" {send \"${PASSWD}\r\";}         #匹配到*password*,输入${PASSWD}
}
expect \"]#\"
send \"echo hello\r\";
send \"exit\r\";
expect eof"
done

执行结果如图:

附常用命令:

send    用于向进程发送字符串
expect    从进程接收字符串
spawn    启动新的进程
interact    允许用户交互【较少使用】

一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ssh登陆主机,执行命令,但是我们希望在命令执行以后,仍然可以停留在ssh连接状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

实例:

PASSWD=xxx
for host in $@
do
CMD="ssh $host"
expect -c "
set timeout 20; #超时时间
spawn $CMD
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"${PASSWD}\r\";}
}
expect \"]#\"
send \"echo hello\r\";
expect eof"
interact
done

执行结果如图:

 

标签:spawn,PASSWD,send,expect,Linux,yes,交互
来源: https://www.cnblogs.com/up-zm/p/15573715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有