【发布时间】:2020-04-09 05:19:38
【问题描述】:
假设我想验证我的代码不包含foo 字符串。所以我正在使用 Linux grep 工具并使用 wc -l 计算输出行数。
现在我只想运行一个步骤if grep | wc -l 的结果等于0。
我怎样才能做到这一点?
【问题讨论】:
标签: bash github-actions
假设我想验证我的代码不包含foo 字符串。所以我正在使用 Linux grep 工具并使用 wc -l 计算输出行数。
现在我只想运行一个步骤if grep | wc -l 的结果等于0。
我怎样才能做到这一点?
【问题讨论】:
标签: bash github-actions
这应该可以解决问题。
job:
steps:
- run: echo ::set-env name=GHA_COUNTER::$(grep "thing" code.h | wc -l)
shell: bash
- run: echo "There's a thing in my code!"
if: env.GHA_COUNTER == '0'
::set-env 将grep | wc 的结果推送到env 上下文,这是if 需要工作的内容。
如果您不想因任何原因污染环境,::set-output 是另一种选择。
job:
steps:
- run: echo ::set-output name=things::$(grep "thing" code.h | wc -l)
id: counter
shell: bash
- run: echo "There's a thing in my code!"
if: steps.counter.outputs.things == '0'
【讨论】:
您只需确保运行 grep 的命令未成功退出,然后在下一步中使用 if: success()。
所以 grep 任务可以使用类似:[ $(grep 'foo' action.ts | wc -l) = 0 ]。
如果输出不为零,则命令将以非零状态退出。
在依赖的任务中,使用if: success(),只有上一个任务成功,这个任务才会运行。
【讨论】: