相关疑难解决方法(0)

调试偶发的 141 shell 脚本错误

在 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 变量,但不知何故仍然爆炸了?

bash pipe signals shell-script

7
推荐指数
1
解决办法
3039
查看次数

标签 统计

bash ×1

pipe ×1

shell-script ×1

signals ×1