添加grep命令后GitHub Workflow失效,如何正确实现文件内容条件检查
问题原因
你收到报错是因为 GitHub Actions 的if字段中,${{ }}包裹的内容是GitHub Actions专属的表达式语法,不支持直接写shell命令(比如grep),系统会把grep识别为Actions的内置变量,找不到就报错。
正确实现方案
方案1:前置步骤输出结果供后续判断(推荐,适合两个逻辑独立分开展示的场景)
完整配置如下:
runs-on: ubuntu-latest steps: # 前置检查步骤,输出匹配结果 - name: Check ApexClass exists id: check_apex run: | # 统计匹配行数,加|| true避免无匹配时步骤异常退出 apex_count=$(grep -c 'ApexClass' package/package.xml || true) # 将结果写入步骤输出变量 echo "apex_count=$apex_count" >> $GITHUB_OUTPUT - name: 'Running checks with test' if: steps.check_apex.outputs.apex_count > 0 run: echo "Found ApexClass" - name: 'Running checks without test' if: steps.check_apex.outputs.apex_count == 0 run: echo "No Apex Found"
注意:你原配置中
grep -c结果 < 0的判断逻辑错误,grep -c返回的匹配行数最小为0,不可能小于0,改为==0即可。
方案2:直接在run内写shell判断(适合逻辑简单的场景)
不需要单独配置if字段,直接在shell脚本中完成判断:
- name: Run Apex check logic run: | if grep -q 'ApexClass' package/package.xml; then echo "Found ApexClass" # 填写匹配到ApexClass时要执行的逻辑 else echo "No Apex Found" # 填写未匹配到ApexClass时要执行的逻辑 fi
内容的提问来源于stack exchange,提问作者Nagendra Kumar Singh
相关产品推荐
相关产品推荐

