Debugging Bash Like a Sire
10 months ago
- #Bash
- #Debugging
- #Scripting
- Bash在错误处理与数据结构方面存在局限,常需编写防御性脚本
- 常用Bash调试标志:`set -euxo pipefail` 实现错误退出、未定义变量检测、打印执行命令、管道失败终止
- 调试标志在不同Bash版本间行为不一致,且难以精确定位问题根源
- 自定义日志函数(`log::info`/`log::level_is_active`/`log::_write_log`)通过格式化日志和级别检查增强调试
- 日志函数利用`BASH_SOURCE`和`FUNCNAME`自动追踪源文件和函数名,提升问题可追溯性
- 将日志重定向至`stderr`(使用`>&2`)避免与脚本实际输出值混淆
- 示例日志格式:`INFO [23.12.22 18:34:09] [github.sh - github::bootstrap]: 开始引导程序`
- 扩展错误处理机制:`log::error`包含调用堆栈信息便于问题诊断
- 通过`trap 'log::error "发生错误"' ERR`确保脚本意外退出时仍记录错误