给 shell 脚本加 set -euo pipefail:少踩一半坑

举报
yd_51737554 发表于 2026/11/06 10:21:49 2026/11/06
【摘要】 写运维小脚本时,默认 bash 行为很宽容:命令失败还会继续跑,未定义变量当成空字符串。线上容易变成「看起来执行完了,其实中间已经挂了」。 一行习惯脚本开头加上:set -euo pipefail含义大致是:-e:任一命令非零退出就停-u:用到未定义变量直接报错-o pipefail:管道里任一环失败,整段算失败 什么时候要小心需要「失败也继续」的步骤,显式写:some_cmd || tru...

写运维小脚本时,默认 bash 行为很宽容:命令失败还会继续跑,未定义变量当成空字符串。线上容易变成「看起来执行完了,其实中间已经挂了」。

一行习惯

脚本开头加上:

set -euo pipefail

含义大致是:

  • -e:任一命令非零退出就停
  • -u:用到未定义变量直接报错
  • -o pipefail:管道里任一环失败,整段算失败

什么时候要小心

需要「失败也继续」的步骤,显式写:

some_cmd || true

或临时关掉:

set +e
risky_cmd
status=$?
set -e

循环里读文件时,注意最后一行没有换行可能导致 read 非零;可以按场景放宽。

小结

这不是银弹,但把失败变成显式问题,比默默跑完更适合自动化和排障。新脚本默认带上这三项,改起来也便宜。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。