我需要创建一组在 lcov
命令的 --remove
选项中使用的正则表达式模式,以便删除覆盖范围中一些无意义的条目文件。
阅读 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
的输出并将其直接复制/粘贴到命令行上,该命令实际上会起作用并删除我想要删除的所有路径。我的印象是,我不了解某些命令选项处理的所有内部方面以及嵌套命令的评估顺序。
预先感谢任何愿意提供帮助的人!
最佳答案
好的,
我终于通过发布完成了
echo $LIST | xargs lcov --output-file coverage_report.info.cleaned --remove coverage_report.info
我切换到echo ... | xargs
的做法是为了强制执行命令的评估顺序,但 -i
的做法并不合适。我的想法是 -i
开关的目的是通过 {}
标记替换当前命令的每个位置中上一个命令的输出,但显然它对输出处理有更多影响。
关于bash - 用于删除多个模式的 LCov 选项处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713680/