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

Shell Daily 2025-12-21: 管道防隐患 (Pipefail)

Shell Daily 2025-12-21: 管道防隐患 (Pipefail)

Shell 管道 (|) 有个极其危险的默认行为:整个管道的退出状态只取决于最后一个命令。这意味着,前面的关键任务如果崩了,只要最后一步(比如格式化输出)成功了,脚本就会欺骗你说“一切正常”。

怎么用

在脚本开头加上这行配置,开启“严格模式”。

  • Bash / Zsh: set -o pipefail
  • POSIX sh: 不支持(这是 ksh/Bash 的扩展特性)。

适用场景

任何涉及数据流转的自动化任务,特别是数据库备份、CI/CD 构建流水线或日志处理。

示例 1:数据库备份的隐患

这是最典型的翻车现场。如果数据库密码错误,导出失败,但压缩命令是成功的,你会得到一个 0 字节的压缩包,且脚本显示“成功”。

# 默认模式:mysqldump 失败,但 gzip 成功,最终 $? 为 0
mysqldump -u root db_name | gzip > backup.sql.gz# 开启保护
set -o pipefail
# 此时只要 mysqldump 报错,整个管道就会返回非零状态
# 结合 set -e 使用,脚本会立即停止,避免后续误操作
mysqldump -u root db_name | gzip > backup.sql.gz

示例 2:不丢失的构建状态

我们常把构建日志同时输出到文件和屏幕。如果不加 pipefail,编译失败了 CI 却可能显示 Pass。

set -o pipefail# 如果 ./build_script.sh 失败
# 即使 tee 命令成功写入了日志,整行命令也会返回失败码
./build_script.sh | tee build.log
http://www.gsyq.cn/news/131005.html

相关文章:

  • CF1810G The Maximum Prefix
  • 【深度拆解智能体技术底层逻辑】从架构到实现的完整解析
  • 高并发场景下等待时间失控?Open-AutoGLM动态调节机制来了,稳了!
  • 还在手动配置Open-AutoGLM?掌握这7步自动化协作方案秒变专家
  • Open-AutoGLM视频号推荐引擎解析(稀缺算法模型首次公开)
  • 2025年北京家庭搬家公司联系方式汇总: 核心城区专业服务商联系通道与高效搬迁指引 - 十大品牌推荐
  • Excalidraw支持网络拓扑自动发现
  • 2025年深圳小型搬家公司联系方式汇总: 本地资深企业官方联系方式与一站式搬迁指南 - 十大品牌推荐
  • Excalidraw支持二维码嵌入生成
  • 时序数据库系列(三):InfluxDB数据写入Line Protocol详解 - 实践
  • 2025年成都管道疏通联系方式汇总:全市专业服务机构官方联系方式与高效合作指引 - 十大品牌推荐
  • C#AI系列(7):从零开始LLM之Tokenizer实现
  • 2025年福州管道疏通联系方式汇总:全市的专业服务官方联系渠道与高效合作指引 - 十大品牌推荐
  • Excalidraw支持微服务调用链绘制
  • 2025年济南小型搬家公司联系方式汇总: 本地资深企业官方联系方式与一站式搬迁 - 十大品牌推荐
  • 2025年深圳小型搬家公司联系方式汇总:精选资深企业官方联系渠道与一站式搬迁服务指引 - 十大品牌推荐
  • 2025年南宁管道疏通联系方式汇总: 全市专业服务商官方联系方式与高效合作指引 - 十大品牌推荐
  • Android UI优化步骤 - 实践
  • Python数据结构(上):字符串、列表、元组
  • 【Open-AutoGLM多用户协作配置】:5大核心步骤实现高效团队协同
  • Cursor锁区问题
  • 辗转相除法
  • .NET WebForm如何支持文件夹目录结构上传的断点续传?
  • 2025年广州管道疏通联系方式汇总:全市专业服务商官方联系渠道与高效合作指引 - 十大品牌推荐
  • 2025年昆明管道疏通联系方式汇总:全市专业服务机构官方联系渠道与高效服务指引 - 十大品牌推荐
  • AI生成图表新范式:Excalidraw+NLP协同工作流
  • 【Open-AutoGLM朋友圈文案生成】:揭秘AI自动生成爆款文案的底层逻辑与实战技巧
  • 2025年北京家庭搬家公司联系方式汇总: 核心城区专业服务商联系通道与一站式搬迁指南 - 十大品牌推荐
  • Excalidraw与Google Drive文件互通方案
  • 为什么90%的Open-AutoGLM部署卡在版本兼容?真相在这里