2

我需要创建一组要在命令--remove选项中使用的正则表达式模式lcov,以删除覆盖文件中的一些无意义的条目。

阅读它的联机帮助页似乎应该将模式列表作为空格分隔的单引号字符串(如 in等)lcov交给它。'patte*n1' 'pa*ter*2' 'p*3'

我能够编写一个小的 bash 脚本,它以命令所需的形式准确生成我需要的列表。如果我发出

export LIST=$( ./myscript.sh )

然后,做 a 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直接在命令行上获取并复制/粘贴它的输出,则该命令实际上可以工作并删除我想要摆脱的所有路径。我的印象是我不了解某些命令选项处理的所有内部方面以及嵌套命令的评估顺序。

提前感谢任何愿意提供帮助的人!

4

2 回答 2

2

行,

我终于通过发行完成了

echo $LIST | xargs lcov --output-file coverage_report.info.cleaned --remove coverage_report.info

我切换到处理echo ... | xargs方式以强制命令的评估顺序,但-i这样做的方式不合适。我的想法是-i切换的目的是通过{}令牌在当前命令的每个位置替换上一个命令的输出,但显然它对输出处理有更多影响。

于 2013-09-10T08:57:32.020 回答
0

使用lcov 1.12and 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"' )
于 2017-02-21T15:48:56.317 回答