bash - 用于删除多个模式的 LCov 选项处理

标签 bash lcov

我需要创建一组在 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/

相关文章:

linux - 如何格式化、枚举和执行 LDAP 查询结果中的每一行?

java - Python - 我如何读入和读出以便其他读者可以阅读它以进一步追求?

bash - 如何告诉 find 命令转义文件名中的空格字符?

linux - 仅使用 GNU sed 在第一个匹配项上插入时出现问题

gcov - lcov 无法正常覆盖

flutter - 如何在 Windows 上以 HTML 格式查看 flutter/dart 的覆盖率报告

c++ - lcov:缺少析构函数的分支覆盖

Linux日志管理和压缩

我们可以使用 gcov 在 C/C++ 源文件中找到可执行代码行吗

sonarqube - 来自 create-react-app 测试的 SonarCloud 覆盖率报告