Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号

Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号

code review!

文章目录

  • Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号
    • 1.expect
    • 2.bash

1.expect

在Expect脚本中,你可以使用expect来监听程序输出,并在输出匹配特定的模式时发送一个中断信号(如Control-C)。以下是一个使用expect脚本的基本示例,用于监听特定的输出并发送中断信号:

例1

#!/usr/bin/expect

# 启动你的进程
spawn your_process

# 设置一个超时时间,防止永远等待
set timeout 30

# 监听输出,直到匹配到 "pattern_to_match" 文本
expect "pattern_to_match"

# 模式匹配后发送 Control-C 中断信号
send "\003"

# 继续处理其他事情或结束脚本
expect eof

your_process 是你想要启动和控制的程序。pattern_to_match 是你期待输出中出现的文本模式。

例2

#!/usr/bin/expect -f

# 设定无超时限制
set timeout -1

# 启动你的进程
spawn ./your_program

# 使用expect命令匹配输出
expect {
    # 当匹配到"特定文本"时,执行大括号内的代码
    "特定文本" {
        # 发送Control-C信号
        send "\003"
        # 可以选择发送其他命令或打印信息
        send_user "已发送中断信号(Control-C)。\n"
    }
    # 处理可能出现的其他情况
    "其他模式1" {
        # 对于其他模式1, 执行对应操作
        # ...
    }
    "其他模式2" {
        # 对于其他模式2, 执行对应操作
        # ...
    }
    # 如果发生超时,处理超时情况
    timeout {
        send_user "操作超时。\n"
        exit 1
    }
}

# 处理进程结束
expect eof

在这个脚本中:

  1. spawn ./your_program 启动你想要监控的程序。你需要将 ./your_program 替换为实际的程序命令。
  2. expect 命令用于监听程序的输出。
  3. "特定文本" 应该被替换为你希望匹配的输出文本。
  4. 当输出匹配到 "特定文本" 时,send "\003" 命令发送Control-C信号,这通常会导致大多数命令行程序终止。
  5. send_user "已发送中断信号(Control-C)。\n" 命令是可选的,用于向用户反馈信息。
  6. "其他模式1""其他模式2" 代表了其他可能匹配的输出模式,你可以根据需要添加或修改这些模式及其对应的动作。
  7. timeout 处理程序如果没有在预定时间内给出任何匹配输出时的情况。

expect命令可以匹配输出中的部分字符串,不需要整行或完整字符串匹配!

expect 命令可以匹配输出中的部分字符串。expect 是一个用于自动化交互式应用程序的命令行工具,它使用 Tcl 语言的脚本。其核心功能是等待特定的字符串出现在程序的输出中,然后根据脚本中定义的模式进行响应。

expect 脚本中,可以使用 expect 命令来等待特定的文本模式出现。这些模式可以是完整行也可以只是行中的某个子串。expect 使用了类似于正则表达式的模式匹配方式来定位输出中的文本。

以下是一个简单的 expect 脚本示例,该脚本等待部分字符串的出现:

#!/usr/bin/expect

# 启动某个交互式命令
spawn some_command

# 等待输出中出现 "password:" 子字符串
expect "password:"

# 当看到 "password:" 时发送密码
send "my_password\r"

# 继续处理...

在上面的脚本中,expect "password:" 表示脚本会等待输出中出现 “password:” 这个子字符串。一旦匹配到,expect 就会执行下一条命令 send 来发送密码。

expect 还可以使用更复杂的正则表达式来匹配更灵活的模式。例如:

expect {
    "username:" {
        send "my_username\r"
        exp_continue
    }
    "password:" {
        send "my_password\r"
    }
    timeout {
        send_user "Connection timed out\n"
        exit
    }
}

在这个示例中,使用了 expect 的复合命令语法来匹配多个可能的输出,包括 “username:” 和 “password:”,并且也处理了超时情况。

使用 expect 时,记得模式匹配默认是全局的,它会在整个输出中搜索你的字符串,而不需要匹配整行。如果需要更精确的控制,可以使用正则表达式来指定匹配的条件。

2.bash

在Bash脚本中,你可以使用 trap 命令来捕捉信号并执行一个命令序列。不过,Bash本身并不是用来做交互式的自动化的最佳工具,因为它没有像Expect那样的模式匹配功能。然而,你可以通过结合使用Bash脚本和工具如 grepsedawk 来监控进程输出,并使用 kill 命令发送信号。

以下是一个简单的例子,这个例子中,我们使用了一个循环来持续读取某个进程的输出,并在发现特定模式时发送SIGINT信号:

#!/bin/bash

# 启动你的进程并记录它的PID
your_process &
PID=$!

# 使用tail -f来获取进程的实时输出
tail -f your_process.log | \
while read LINE
do
    echo "$LINE"
    # 检查行内容是否包含特定模式
    if [[ "$LINE" == *pattern_to_match* ]]; then
        # 发送SIGINT (通常等同于Control-C)
        kill -SIGINT $PID
        break
    fi
done

# 等待进程结束
wait $PID

在这个脚本中,your_process 应该被替换为你想要启动的命令,而 your_process.log 应该是该进程的输出文件。pattern_to_match 应该是你想要匹配的文本模式。

请注意,这些示例可能需要根据你的实际需求进行调整。使用Bash来监听和处理实时输出可能会比较复杂,尤其是如果输出速率非常快或者模式比较复杂的时候。Expect脚本天生就是为了处理这类交互设计的,所以通常会是一个更好的选择。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/378549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis——高级主题

介绍Redis的高级主题,包括服务器配置、Redis事务、Redis发布和订阅、Pipeline批量发送请求、数据备份与恢复等。 1、服务器配置 在Windows和Linux的Redis服务器里面,都有一个配置文件。Redis配置文件位于Redis安装目录下,在不同操作系统下&…

VMWare下载安装(包含Window是和Mac)

VMWare下载安装(包含Window是和Mac) 文章目录 VMWare下载安装(包含Window是和Mac)一、windows下载VMWare①:下载01:网盘下载02:官方下载 ②:安装③:密钥 二、Mac下载VMWa…

vue3:26—新的内置组件

目录 Teleport Suspense Teleport 什么是Teleport? Teleport 是一种能够将我们的组件html结构移动到指定位置的技术 当在元素中的css使用了filter滤镜属性的时候,会导致内部 fixed 元素定位发生错误,即不再相对 viewport 进行定位,而是相对…

使用 WMI 查询安全软件信息

在这篇文章中,我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分,并解释每个步骤所涉及的技术和原理。 一、什么是 WMI? WMI 是 Windows Manag…

BlueLotus 下载安装使用

说明 蓝莲花平台BlueLotus,是清华大学曾经的蓝莲花战队搭建的平台,该平台用于接收xss返回数据。 正常执行反射型xss和存储型xss: 反射型在执行poc时,会直接在页面弹出执行注入的poc代码;存储型则是在将poc代码注入用…

基于51 单片机的交通灯系统 源码+仿真+ppt

主要内容: 1)南北方向的绿灯、东西方向的红灯同时亮40秒。 2)南北方向的绿灯灭、黄灯亮5秒,同时东西方向的红灯继续亮。 3)南北方向的黄灯灭、左转绿灯亮,持续20秒,同时东西方向的红灯继续…

Spinnaker多云持续交付平台: 部署Minio存储服务

目录 一、实验 1.环境 2.K8S storage节点部署NFS 3.K8S 动态创建PV 4.K8S master节点部署HELM3 4.K8S master节点部署Minio存储服务(第一种方式安装) 5.Minio客户端安装MC命令 6.K8S master节点使用Docker 部署Minio存储服务(第二种方…

设计模式学习笔记05(小滴课堂)

讲解Adapeter设计模式和应用场景 接口的适配器案例实战 代码: 定义一个接口: 编写适配器: 写我们的商品类: 会员类: 这样我们不同的需求可以根据需要去实现不同的接口方法,而不用实现全部接口方法。 适配…

elasticsearch重置密码操作

安装es的时候需要测试这个url:http://127.0.0.1:9200/ 出现弹窗让我输入账号和密码。我第一次登录,没有设置过账号和密码, 解决方法是:在es的bin目录下打开cmd窗口,敲命令:.\elasticsearch-reset-password…

移动Web——Bootstrap

1、Bootstrap-简介 Bootstrap是由Twitter公司开发维护的前端UI框架&#xff0c;它提供了大量编写好的CSS样式&#xff0c;允许开发者结合一定HTML结构及JavaScript&#xff0c;快速编写功能完善的网页及常见交互效果 <!DOCTYPE html> <html lang"en"> &…

上海亚商投顾:成交量突破万亿 沪指重回2800

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 昨日A股三大指数延续上涨&#xff0c;深成指领涨&#xff0c;沪指重新站上2800点。不过&#xff0c;指数黄白分…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年&#xff0c;法国工程学院院士Mallat教授深受深度学习结构框架思想的启发&#xff0c;提出了基于小波变换的小波时间散射网络&#xff0c;并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络&#xff0c;不同的是其滤波器是预先确定好的小波…

从源码学习访问控制符使用

从源码学习访问控制符使用 Java中的访问控制符 ​ 在Java中&#xff0c;有四个访问控制符&#xff1a;public、protected、default&#xff08;默认或缺省&#xff0c;不使用关键字&#xff09;和private。 ​ 它们的访问范围如下&#xff1a; public&#xff1a;公共访问权…

【人工智能】人工智能 – 引领未来科技的潮流

写在前面 引言红利挑战结论 引言 人工智能是指使计算机系统表现出类似于人类智能的能力。其目标是实现机器具备感知、理解、学习、推理和决策等智能行为。人工智能的发展可以追溯到上世纪50年代&#xff0c;随着计算机技术和算法的不断进步&#xff0c;人工智能得以实现。 今天…

『运维备忘录』之 Kubernetes(K8S) 常用命令速查

一、简介 kubernetes&#xff0c;简称K8s&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用。kubernetes是基于容器技术的分布式架构解决方案&#xff0c;具有完备的集群管理能力&a…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月8日,星期四

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月8日 星期四 农历腊月廿九 1、 气象局&#xff1a;南方地区雨雪冰冻天气趋于结束&#xff0c;需警惕融雪融冰引发的次生灾害。 2、 应急管理部&#xff1a;1月各种自然灾害共造成228.9万人次不同程度受灾&#xff0c;直…

网络套件字(理论知识)

一、源IP地址和目的IP地址 上次说到IP地址是为了是为了让信息正确的从原主机传送到目的主机&#xff0c;而原IP地址和目的IP地址就是用于标识两个主机的&#xff0c;既然叫做地址必然有着路径规划的作用&#xff0c;而路径规划最重要的就是&#xff0c;从哪来到哪去&#xff0…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…

论文封面下划线总是对不齐,这3步你肯定没做!

论文封面 在写论文时&#xff0c;总会遇到论文封面下划线对不齐&#xff0c;学会下面这三招轻松搞定封面。 解决方法 ①选中文字&#xff0c;点击“插入”&#xff0c;选择“表格”&#xff0c;找到“文本转化为表格”。列数为2&#xff0c;文字分割位置选空格&#xff0c;设置…

路由器如何映射端口映射?

在现代互联网中&#xff0c;随着网络应用的不断发展&#xff0c;很多用户需要进行远程访问或搭建服务器来满足自己的需求。由于网络安全的原因&#xff0c;直接将内网设备暴露在公网中是非常危险的。为了解决这个问题&#xff0c;路由器映射端口映射技术应运而生。本文将介绍什…