github 操作中的 Bash grep 始终以状态 1 退出

问题描述 投票:0回答:1

在 github 工作流程中,我尝试使用 grep 检查版本是否与 SemVer 的 regexp 匹配来检查项目的版本是否符合 SemVer 标准。 我尝试了不同的方法来做到这一点,但从未成功地重现我在本地 shell 上开发的脚本的行为。 例如,以下 bash 脚本成功检测 TAG_NAME 变量是否包含 SemVer 版本号: TAG_EXISTS="v3.0.12" SEMVER="^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA- Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" grep -oE "$SEMVER" <<< "$TAG_EXISTS" ISSEMVER="$?" echo "$ISSEMVER"

返回1
...以及 TAG_EXISTS="3.0.12"
返回 0

但是,如果我将其转移到以下 github 工作流程,它总是返回 1,并且我无法找到获取 grep 结果或评估此操作的退出代码的方法:

checkVersion: needs: tests runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.x .....some other not related steps - name: Check for Existing Tag id: check_tag run: | set +x TAG_EXISTS=3.0.14 SEMVER="^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a- zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" grep -oE "$SEMVER" <<< "$TAG_EXISTS" ISSEMVER="$?" echo "$ISSEMVER"

如何在 grep 未找到匹配项时使 github 操作失败,并在 grep 找到匹配项时使其通过?

我也尝试在子shell中进行grep:

RESULT=$( echo "$TAG_EXISTS" | grep -oE "$SEMVER")

像这样,管道总是失败并以状态 1 退出

bash grep continuous-integration github-actions
1个回答
0
投票
grep

的实施。

与我的实现例如“3.0.12”不匹配。

通过我的实现,当我使用

-P

(

--perl-regexp
) 而不是
-E
(
--extended-regexp
) 时,它会匹配。
我建议尝试一下,即:

grep -qP "$SEMVER" <<< "$TAG_EXISTS"

(我将 

-o

更改为

-q
,因为这似乎就是您所需要的。)
    

© www.soinside.com 2019 - 2024. All rights reserved.