Вы можете сделать это независимо от платформы, используя Ant filterchain вместо выполнения grep.
В следующем примере фильтруется каждый файл в report.dir
для регулярного выражения с фильтром головки для короткого замыкания при обнаружении одного совпадения. Вывод результатов загружается в свойство.
<target name="test">
<loadresource property="junit.failed">
<concat>
<fileset dir="${report.dir}">
<include name="**/*"/>
</fileset>
<filterchain>
<linecontainsregexp>
<regexp pattern="failures|errors=\"\d+\""/>
</linecontainsregexp>
<headfilter lines="1"/>
</filterchain>
</concat>
</loadresource>
<fail if="junit.failed" message="FAILING - unit tests failed"/>
</target>
Одной вещью, которую вы не можете достичь с помощью этой техники, является получение имен соответствующих файлов (которые вам дает grep -l
), а не соответствующих строк. Однако вы не используете имена файлов в вашем примере.
Также обратите внимание, что регулярное выражение, которое вы используете в grep, не найдет ошибок и сбоев больше 9, например. errors="11"
не будет найдено. Шаблон в примере выше находит это.