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

linux shell 当命令执行出现错误立即退出的方法

在 Linux 脚本中,如果你想在整个脚本执行完毕后检查是否有错误发生,可以通过以下几种方式实现:


1. 使用 $? 检查上一条命令的退出状态

  • 每个命令执行后,Shell 会将其退出状态存储在特殊变量 $? 中。
  • $? 的值为 0 表示成功,非 0 表示失败。
示例:
#!/bin/bashcommand1
command2
command3# 检查整个脚本是否有错误
if [ $? -ne 0 ]; thenecho "Error: Some command failed!"exit 1
elseecho "All commands executed successfully!"
fi

2. 使用 set -e 使脚本在遇到错误时立即退出

  • set -e 会让脚本在任何命令失败时立即退出。
  • 这样可以避免手动检查每个命令的退出状态。
示例:
#!/bin/bashset -e  # 开启错误退出command1
command2
command3echo "All commands executed successfully!"
注意事项:
  • 如果某些命令可能会失败,但你希望脚本继续执行,可以使用 || true 忽略错误:
    command1 || true
    

3. 使用 trap 捕获错误并执行清理操作

  • trap 可以在脚本退出时捕获错误,并执行指定的清理操作。
  • 结合 set -e 使用效果更佳。
示例:
#!/bin/bashset -e  # 开启错误退出# 定义错误处理函数
cleanup() {echo "Error: Script failed!"# 执行清理操作,如删除临时文件
}# 捕获 EXIT 信号
trap cleanup EXITcommand1
command2
command3echo "All commands executed successfully!"

4. 记录错误日志

  • 可以将错误信息重定向到日志文件,方便后续排查。
示例:
#!/bin/bashLOG_FILE="script.log"# 将标准输出和错误输出重定向到日志文件
exec > >(tee -a "$LOG_FILE") 2>&1command1
command2
command3if [ $? -ne 0 ]; thenecho "Error: Some command failed! Check $LOG_FILE for details."exit 1
elseecho "All commands executed successfully!"
fi

5. 总结

方法适用场景
$?手动检查每个命令的退出状态,适合简单的脚本。
set -e自动退出脚本,适合希望快速失败的场景。
trap捕获错误并执行清理操作,适合需要资源管理的场景。
记录日志将错误信息保存到日志文件,适合需要排查问题的场景。

6. 推荐方案

结合 set -etrap 是最常用的方式,既能快速失败,又能执行清理操作:

#!/bin/bashset -e  # 开启错误退出cleanup() {echo "Error: Script failed!"# 执行清理操作
}trap cleanup EXITcommand1
command2
command3echo "All commands executed successfully!"

通过以上方法,你可以有效地检查脚本是否执行成功,并在失败时采取相应的措施。

其它方法

将错误信息重定向输出到日志中,在结束后检查日志是否出现错误信息,可能存在一些无效的警告等信息在里面,需要过滤

./cmd.sh 2>err.log

相关文章:

linux shell 当命令执行出现错误立即退出的方法

在 Linux 脚本中,如果你想在整个脚本执行完毕后检查是否有错误发生,可以通过以下几种方式实现: 1. 使用 $? 检查上一条命令的退出状态 每个命令执行后,Shell 会将其退出状态存储在特殊变量 $? 中。$? 的值为 0 表示成功&#…...

与本地电脑PDF文档对话的PDF问答程序

文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时,了解LangChain框架的理论知识固然重要,但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作,你可…...

QT之改变鼠标样式

QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标&#xff0c…...

后端开发:开启技术世界的新大门

在互联网的广阔天地中,后端开发宛如一座大厦的基石,虽不直接与用户 “面对面” 交流,却默默地支撑着整个互联网产品的稳定运行。它是服务器端编程的核心领域,负责处理数据、执行业务逻辑以及与数据库和其他后端服务进行交互。在当…...

Sun-Panel:简洁且美观的导航首页开源项目!!

在这个数字化飞速发展的时代,我们几乎每个人都拥有自己的服务器或者NAS。但问题来了,管理这些设备往往需要记住一大堆复杂的命令和界面,对于像了不起这样追求简洁生活的程序员来说,简直是噩梦! 今天介绍一款界面清爽&…...

第4章 信息系统架构(四)

4.6 网络架构 网络是信息技术架构中的基础,不仅是用户请求和获取IT信息资源服务的通道,同时也是 信息系统架构中各类资源融合和调度的枢纽。特别是云计算、大数据和移动互联网技术飞速发 展的今天,网络更加成为实现这些技术跨越的重要环节。…...

【Java八股文】07-Redis面试篇

【Java八股文】07-Redis面试篇 Redis面试篇认识redis为什么用 Redis 作为 MySQL 的缓存? 数据结构讲一下Redis底层的数据结构ZSet底层是由什么实现的 线程模型Redis 是单线程吗?Redis怎么进行I/O多路复用的?Redis 采用单线程为什么还这么快&a…...

Windows PyCharm的python项目移动存储位置后需要做的变更

项目使用的venv虚拟环境,因此项目移动存储位置后需要重新配置python解释器的位置,否则无法识别,若非虚拟环境中运行,则直接移动后打开即可,无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition),其…...

微信小程序消息推送解密

package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...

《道德经的现代智慧:解码生活与商业的底层逻辑2》

第二章:人际互动的智慧 🤝 引言:现代人际关系的困境 🌟 时代背景:超连接时代的人际迷思 🌐 在这个前所未有的超连接时代,我们似乎比任何时候都更"在线"、更"联系"&#…...

通过监督微调提升多语言大语言模型性能

引言 澳鹏助力一家全球科技公司提升其大语言模型(LLM)的性能。通过提供结构化的人工反馈形式的大语言模型训练数据,让该模型在30多种语言、70多种方言中的表现得到优化。众包人员们进行多轮对话,并依据回复的相关性、连贯性、准确…...

用deepseek学大模型05逻辑回归

deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。…...

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…...

vue文件没有name属性怎么被调用

如果你在 index.vue 文件中定义了一个组件,但没有在组件定义中使用 name 属性,你仍然可以通过几种方式来引用和使用这个组件。 1. 使用局部注册 在父组件中直接导入并注册 index.vue 中的组件(index.vue没有name属性)&#xff0…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-build.py

build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...

alt+tab切换导致linux桌面卡死的急救方案

环境 debian12 gnome43.9 解决办法 观察状态栏,其实系统是没有完全死机的,而且gnome也可能没有完全死机。 1. alt f4 关闭桌面上的程序,因为这个方案是我刚刚看到的,所以不确定能不能用,比起重启系统,…...

Spark(2)linux和简单命令

(一)Linux的文件系统 文件系统:操作系统中负责管理和存储文件信息的软件结构称为文件管理系统。 文件系统的结构通常叫做目录树结构,从斜杆/根目录开始; Linux号称万物皆文件,意味着针对Linux的操作,大多…...

如何在Windows下使用Ollama本地部署DeepSeek R1

参考链接: 通过Ollama本地部署DeepSeek R1以及简单使用的教程(超详细) 【DeepSeek应用】DeepSeek R1 本地部署(OllamaDockerOpenWebUI) 如何将 Chatbox 连接到远程 Ollama 服务:逐步指南 首先需要安装oll…...

【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】

Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等 背景:postman中如何使用binary格式上传文件 Content-TypeContent-Type的格式由三部分组成:以下是一些常见的Content-Type示例: Postman中 binary格式定义:用…...

spring boot知识点3

1.spring boot能否使用xml配置 可以,但是很繁琐,现在都建议走JavaConfig 2.spring boot的核心配置文件 application.properties application.yml 3.bootstrap.properties和application.properties的区别 b:用于远程配置 a:…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...