在 CI(Gitlab、运行 Alpine Linux 的 Docker 容器)上运行脚本时,我遇到了零星故障,信号 141 似乎表示“SIGPIPE”。但我不明白哪一步失败了或者如何调试它。
#!/usr/bin/env bash
set -euxo pipefail
set -a
# ...
git fetch --tags
RELEASE=$(git tag | grep -E "${BUILD_ENV}-release-(\d+)" | cut -d"-" -f3 | sort -nr | head -1)
RELEASE=$(( RELEASE + 1 ))
Run Code Online (Sandbox Code Playgroud)
偶发错误似乎发生在倒数第二行管道内,我得到的日志是:
++ git tag
++ cut -d- -f3
++ sort -nr
++ grep -E 'prod-release-(\d+)'
++ head -1
+ RELEASE=323
ERROR: Job failed: exit code 141
Run Code Online (Sandbox Code Playgroud)
我将如何调试它以找出哪一行实际上失败了?看起来它成功填充了 RELEASE 变量,但不知何故仍然爆炸了?