我想测试文件是否包含模式(当从 travis 运行时,跳过了应该使我的构建失败的 jasmine 测试)。
我有这样的代码:
skipped_tests:
$(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)
grep
问题是当它找到与模式匹配的行时,我没有得到输出。我想要这个,所以我可以在 travis 构建日志中查看导致问题的行。有没有办法反转命令错误代码(返回非 0 时返回 0,反之亦然)?
我也试过这个:
skipped_tests:
grep -E 'iit|ddescribe' spec/terminalSpec.js
@test $$? -eq 0 # should it be -ne
但这会回显一条有iit
并且没有失败的行,如果它没有找到该行,那么它会在 grep 上失败。
这个怎么样?
我通过两次调用 grep 解决了这个问题
有没有更好的办法?
我已经尝试了一些其他的东西,但似乎 make 正在对字符串进行操作(在 Makefile 上使用 str.replace 或其他东西),因为如果 grep 的输出是源代码行,它会从其他可能的解决方案中给出语法错误。
可能的解决方案:
在顶部定义变量
Makefile
并使用ifeq
. 例如:但是
grep
将在每次调用时执行make
,即使 skipped_tests 没有调用。如果每次都调用该目标,那么它也是解决方案。考虑到你的意愿。如果要
grep
多次在目标中使用结果,可以使用多行表达式。假设我有下一个Makefile
:我
test.js
在同一个目录中有下一个:如果模式不匹配,则会出现下一个结果:
如果模式存在,则会出现下一个结果:
为了便于阅读,您可以
``
使用res=$$(grep -E ...) || ...
.当然,在一次系统调用中执行多行命令不是很方便(这个多行是解释器的一个会话),但有时在您需要操作一个变量(环境变量)的情况下可能很有用。