当前位置: 首页 > news >正文

Linux expect命令详解

在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。

linux-expect.jpg

什么是Expect命令?

expect 是一个用于自动化交互式进程的工具。它的主要功能是根据程序的输出模式(patterns)发送输入,从而实现自动化交互。

安装Expect命令

  • Ubuntu(apt)
sudo apt-get update  # 更新软件包列表
sudo apt-get install expect  # 安装软件包
  • CentOS(yum)
sudo yum update  # 更新软件包列表(yum)
sudo yum install expect  # 安装软件包(yum)
  • Alpine(apk)
apk add expect  # 安装软件包

使用场景

  1. 自动化登录和操作远程服务器

通过 ssh 登录远程服务器,自动输入密码,执行命令,并退出。这对于需要定期执行的任务或远程服务器的自动化管理非常有用。

  1. 安装和配置软件

在安装过程中,有些软件可能需要用户输入配置信息,例如数据库密码、管理员用户名等。使用 expect 可以自动填写这些信息,使软件安装过程自动化。

  1. 交互式脚本

创建交互式脚本,可以与用户进行动态的、基于输入的交互。这对于向用户提供命令行工具的友好界面很有用。

  1. 自动化测试

在测试环境中,expect 可以用于自动化测试,模拟用户的输入和操作。这有助于确保程序在各种情况下的正确性。

  1. 文件传输

使用 scp 进行文件传输时,如果需要密码,expect 可以自动提供密码,从而实现脚本化的文件传输。

  1. 自动化配置工具

与配置管理工具结合使用,可以编写 expect 脚本以在大规模环境中自动配置系统参数、安装软件或进行其他配置任务。

  1. 处理交互式命令行工具

与一些需要用户输入的命令行工具(如配置工具、安装程序等)交互时,expect 可以自动完成交互过程。

基本语法及用法示例

expect命令的基本语法如下:

expect [选项] [脚本]

其中,选项 可以包括 -c(直接指定脚本)、-d(启用调试输出)、-v(打印版本信息)等。

用法示例

以下是一个scp进行文件传输时,expect 自动提供密码的示例命令

expect -c 'spawn sh -c "scp -r /var/jenkins_home/workspace/blog/docs/.vuepress/dist/\* xiuji@192.168.10.106:/home/xiuji/docker/vuepress/html"expect {"password" {set timeout 20; send "12345\r"; exp_continue;}}expect eof'
  • expect -c '...': 这是一个命令行参数,指定了一个包含 expect 脚本的字符串。

  • spawn sh -c "scp -r /var/jenkins_home/workspace/blog/docs/.vuepress/dist/\* xiuji@192.168.10.106:/home/xiuji/docker/vuepress/html": 使用 spawn 启动一个子 shell,并在其中执行 scp 命令。该命令的目的是将 /var/jenkins_home/workspace/blog/docs/.vuepress/dist/ 目录下的文件递归地传输到远程服务器。

  • expect { "password" {set timeout 20; send "12345\r"; exp_continue;}}:

expect 用于等待子进程的输出,并根据输出匹配模式执行相应的动作。

在这里,脚本期望子进程的输出中包含 “password” 字符串。

一旦匹配到 “password”,它将设置一个超时时间为20秒(set timeout 20),然后使用 send 发送密码 “12345” 并模拟按下回车键(\r),接着通过 exp_continue 继续等待,以便处理可能的其他 expect。

  • expect eof': 这表示脚本会等待子进程的结束(eof 表示 end of file)。一旦子进程结束,整个 expect 脚本也就结束了。

使用技巧

  1. 模式和通配符

expect命令的模式可以包含通配符,如 *?[...],以匹配可变的输出部分。

  1. 超时设置

使用 timeout 选项可以设置等待模式出现的最大时间,避免无限等待。

  1. 交互性

通过组合多个 expect 命令,可以创建复杂的脚本以处理程序的不同响应。

  1. 记录调试信息

在脚本开头添加 exp_internal 1 可以显示详细的调试信息,方便调试脚本。

  1. 错误处理

使用 expect_before 和 expect_after 处理在其他期望之前或之后出现的常见模式,提高脚本的健壮性。

以下是一个简单的expect脚本,用于自动化SSH登录

#!/usr/bin/expectset timeout 10spawn ssh xiuji@192.168.10.106expect "password:"
send "123456\n"expect "$ "
send "ls\n"expect "$ "
send "exit\n"

脚本执行过程如下

_20231202223700.jpg

总结

expect命令是Linux系统中一个非常实用的工具,可以用于自动化与需要用户输入进行交互的程序。通过灵活运用其基本语法和技巧,可以创建强大且高效的自动化脚本,提高工作效率。然而,需要谨慎使用,尤其是在处理敏感信息时,确保脚本的安全性和可维护性。希望本文能帮助你更好地理解和应用expect命令。

相关文章:

Linux expect命令详解

在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。 什么是Expect命令? expect 是一个用于自动化交互式进程的工具。它的主要功能…...

ubuntu18编译Android8的Failed to contact Jack server问题

环境 ubuntu18.04 Android8.1.0 步骤 安装环境 apt install git-core apt install gnupg apt install flex apt install bison apt install gperf apt install build-essential apt install curl apt install libc6-dev apt install libssl-dev apt install libncurses5-dev:…...

FindSecBugs支持的检测规则

很多SAST集成了FindSecBugs这个开源工具,其好处是直接对Class文件进行检测,也就是直接检测二进制问题,可以直接检测war、jar,还是非常方便的。虽然误报率较高,但是这些检测出来的安全漏洞很多是安全从业人员耳熟能详的…...

【WPF.NET开发】WPF.NET桌面应用开发概述

本文内容 为何从 .NET Framework 升级使用 WPF 进行编程标记和代码隐藏输入和命令控件布局数据绑定图形和动画文本和版式自定义 WPF 应用 Windows Presentation Foundation (WPF) 是一个与分辨率无关的 UI 框架,使用基于矢量的呈现引擎,构建用于利用现…...

态势感知是什么

在当今高度信息化的时代,信息安全风险已经成为企业、政府和个人的重要关注点。为了有效应对这些风险,态势感知成为了一种日益重要的能力。态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力,是以安全大数据为基础,从全局…...

Spring MVC常用的注解, Controller注解的作用,RequestMapping注解的作用 @ResponseBody注解的作用

文章目录 Spring MVC常用的注解和注解的相关作用Controller注解的作用RequestMapping注解的作用ResponseBody注解的作用PathVariable和RequestParam的区别 Spring MVC常用的注解和注解的相关作用 RequestMapping:用于处理请求 url 映射的注解,可用于类或…...

「Verilog学习笔记」自动贩售机1

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 自动贩售机中可能存在的几种金额:0,0.5,1,1.5,2,2.5,3。然后直接将其作为状态机的几种状…...

【大模型】更强的 ChatGLM3-6B 来了,开源可商用

【大模型】更强的 ChatGLM3-6B 来了,开源可商用 简介ChatGLM3-6B 环境配置环境搭建安装依赖 代码及模型权重拉取拉取 ChatGLM3-6B拉取 ChatGLM3-6B 模型权重及代码 终端测试网页测试安装 gradio加载模型并启动服务 参考 简介 ChatGLM3-6B ChatGLM3-6B 是 ChatGLM …...

Maxscript到Python转换工具教程

Maxscript到Python转换器教程 Maxscript到Python转换器采用MAXScript程序,将其解析为语法树,然后从语法树中生成等效的Python代码。通过提供python的自动翻译,帮助python程序员理解maxscript示例。 【项目状况】 将正确解析最正确的maxcript…...

Spark_日期参数解析参数-spark.sql.legacy.timeParserPolicy

在Apache Spark中,spark.sql.legacy.timeParserPolicy是一个配置选项,它控制着时间和日期解析策略。此选项主要影响如何解析日期和时间字符串。 在Spark 3.0之前的版本中,日期和时间解析使用java.text.SimpleDateFormat,它在解析…...

C语言之结构体

一.前言引入. 我们知道在C语言中有内置类型,如:整型,浮点型等。但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体…...

【蓝桥杯软件赛 零基础备赛20周】第5周——高精度大数运算与队列

文章目录 1. 数组的应用–高精度大数运算1.1 Java和Python计算大数1.2 C/C高精度计算大数1.2.1 高精度加法1.2.2 高精度减法 2. 队列2.1 手写队列2.1.1 C/C手写队列2.1.2 Java手写队列2.1.3 Python手写队列 2.2 C STL队列queue2.3 Java队列Queue2.4 Python队列Queue和deque2.5 …...

C#:程序发布的大小控制

.net不讨喜有个大原因就是.net平台本身太大了,不同版本没有兼容性,程序依赖哪个版本用户就要安装哪个版本,除非你恰好用的是操作系统默认安装的版本——问题是不同版本操作系统默认安装的不一样。 所以打包程序就很头疼,不打包平台…...

Python中的split()、rsplit()、splitlines()的区别

split、rsplit、splitlines的区别 1、split()2、rsplit()3、splitlines() Python提供了三种字符串分割的方法:split()、rsplit()和splitlines();本文主要通过案例介绍这三种字符串分割函数的区别 1、split() split()主要用于从左向右匹配分割符进行分割…...

上位机开发框架:QT与winform/wpf对比

QT QT 是一个跨平台的 C 应用程序框架,它提供了丰富的 UI 组件和功能强大的网络通信、数据库操作等模块。QT 的优势在于其良好的跨平台性能,可以方便地部署在 Windows、Linux、macOS 等不同操作系统上。此外,QT 还具有强大的 UI 设计能力&am…...

Halcon tiff 点云读取以及平面矫正

一、读取tiff 图 dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle)xResolution:0.0025 yResolution:0.0025 zResolution:0.001 read_image (IntputImage, C:/Users/alber/Desktop/2023-08-15_16-38-24-982_/Sta5_002.tif) zoom_image_factor (Intpu…...

详解Spring中基于注解的Aop编程以及Spring对于JDK和CGLIB代理方式的切换

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…...

百度/抖音/小红书/微信搜索品牌形象优化怎么做?

搜索口碑是网络营销不可或缺的一部分,企业如何做好品牌搜索口碑优化呢?小马识途营销顾问建议从以下几方面入手。 1. 通过关键字优化提高自身知名度 通过对竞争对手和目标客户的关键字进行分析,企业可以确定哪些关键字可以提高自身品牌知名度。…...

爬虫学习(三)用beautiful 解析html

安装库 import requests from bs4 import BeautifulSoup headers {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"} for start_num in range(0,250…...

OSG编程指南<十四>:OSG纹理渲染之普通纹理、多重纹理、Mipmap多级渐远纹理及TextureRectangle矩阵纹理

1、纹理映射介绍 物体的外观不仅包括形状,不同物体表面有着不同的颜色和图案。一个简单而有效地实现这种特性的方法就是使用纹理映射。在三维图形中,纹理映射(Texture Mapping)的方法运用广泛,使用该技术可以大大提高物…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版,年终工作总结PPT模版,简约精致扁平化商务通用动画PPT模版,素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...