Linux利用expect模拟键盘输入实现自动化交互
发布网友
发布时间:2天前
我来回答
共1个回答
热心网友
时间:2024-12-05 10:16
Linux expect命令是一个自动化工具,用于编写交互式脚本以与命令行应用程序进行交互。通过监控和响应来自应用程序的输出以及发送输入,实现自动化交互。Expect脚本用于执行复杂操作,如SSH会话自动登录、路由器配置和邮件发送等,Tcl语言的使用使得熟悉该语言的人编写脚本更为容易。Expect还具备Tcl语言的逻辑分支、循环和变量功能,使其成为自动化命令行任务的高效工具。
在Linux日常使用中,自动化交互需求常见,如SSH操作繁琐低效,通过expect工具模拟键盘输入,实现自动输入、自动交互,显著提升效率。
安装expect后,通过其命令如spawn、expect、send、interact和变量设置等功能,实现脚本编写。spawn用于指定与进程交互,默认与标准输入输出交互;expect等待进程反馈,与正则表达式匹配;send模拟键盘输入,常与expect结合使用,实现预期结果后发送指定字符串;interact停止自动交互,进入人工模式;变量set name value用于设置,$name引用变量值。
举例说明expect使用方法。如使用expect脚本自动执行sudo turn-wifi-into-wifimode yes命令打开友善之臂ARM板NanoPi-NEO2的WiFi AP模式,以及通过expect脚本自动实现SSH远程访问链接。
在expect脚本中,传参与普通脚本不同。基于bash的shell脚本传参为$0、$1~$n,而expect脚本的命令行参数保存在数组$argv中,并常将其赋值给变量,如set 变量名 [lindex $argv 参数号数]。$argc表示命令行参数个数,而argv不包含脚本名字本身。注意,argv0与[lrange $argv 0 0]是不同的,前者是默认变量名,后者得到的是argv的0个元素。
expect与send搭配使用,实现精确的自动化输入,使得脚本执行更为高效准确。