给 shell 脚本加 set -euo pipefail:少踩一半坑
【摘要】 写运维小脚本时,默认 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)