我需要创建一组在--remove
命令的lcov
选项中使用的正则表达式模式,以便删除coverage文件中的一些无意义的条目。
阅读lcov
的联机帮助页,似乎模式列表应作为空格分隔的单引号字符串传递给它(如'patte*n1' 'pa*ter*2' 'p*3'
中所示)。
我能够编写一个小的bash脚本,它以命令所需的格式生成我需要的列表。如果我发出
export LIST=$( ./myscript.sh )
然后,做一个echo $LIST
,我得到了我期望的列表
'path/file1' 'path/file2' 'path/file3'
(正则表达式模式列表由要从分析中删除的某些模式的结尾部分组成)。
当我将此列表传递给命令时出现问题:
lcov --remove coverage_report.info '/usr/*' $( echo $LIST ) --output-file coverage_report.info.cleaned
为了从我的列表中删除/ usr / *和文件,但是它没有按预期工作:实际上没有删除路径列表中的路径。我尝试了不同的形式:
echo $LIST | xargs -i lcov --remove coverage_report.info {} --output-file coverage_report.info.cleaned
如果我获取echo $LIST
的输出并直接在命令行上复制/粘贴它,该命令实际上有效并删除了我想要删除的所有路径。我的印象是,我不了解某些命令选项处理的所有内部方面以及嵌套命令的评估顺序。
感谢任何愿意帮助的人!
答案 0 :(得分:2)
确定,
我终于通过发出
来完成了它echo $LIST | xargs lcov --output-file coverage_report.info.cleaned --remove coverage_report.info
我切换到echo ... | xargs
方式来强制执行命令的评估顺序,但-i
这样做的方式并不合适。我认为-i
切换目的是通过{}
令牌替换当前命令的每个位置的前一个命令的输出,但显然它对输出有一些更多的后果处理
答案 1 :(得分:0)
对于lcov 1.12
和bash 4.3.46(1)
,上述建议对我不起作用。该清单需要扩展如下:
echo ${LIST[@]} | xargs lcov -o coverage_report.info.cleaned -r coverage_report.info
此外,我的列表是双引号字符串列表,例如
LIST=( '"path/file1"' '"path/file2"' '"path/file3"' )