Bash lcov代码覆盖率--带有输入变量的remove命令不起作用 问题描述
我正在尝试筛选我们不希望在测试覆盖率中忽略的目录。为此,我们使用了Bash lcov代码覆盖率--带有输入变量的remove命令不起作用 问题描述,bash,lcov,Bash,Lcov,我正在尝试筛选我们不希望在测试覆盖率中忽略的目录。为此,我们使用了Lcov 当我尝试将要忽略的目录放入变量\uuuu ignoreinput时,命令${uuuu lcov}${uuuu gcovopts}--remove MYCODE.info“${uu ignoreinput}”-o MYCODE\u filtered.info>/dev/null 2>/dev/null不起作用,它不会过滤任何内容。而当我使用命令时,不使用\uu ignoreinput,如中所示 ${__lcov} ${_
Lcov
当我尝试将要忽略的目录放入变量\uuuu ignoreinput
时,命令${uuuu lcov}${uuuu gcovopts}--remove MYCODE.info“${uu ignoreinput}”-o MYCODE\u filtered.info>/dev/null 2>/dev/null
不起作用,它不会过滤任何内容。而当我使用命令时,不使用\uu ignoreinput
,如中所示
${__lcov} ${__gcovopts} --remove MYCODE.info '/opt/*' '/usr/include/*' '*3rdParty/*' '*Input_API/*' '*Grammars/*' -o MYCODE_filtered.info > /dev/null 2> /dev/null
if [[ ${?} -ne 0 ]] ;then echo "Error *** lcov filtrering failed" && exit 1 ;fi
过滤器工作正常。我做错了什么。我不明白
剧本
传递
\uuu ignoreinput
的一种简单方法是将全局表达式存储在数组中的单引号下,在传递到lcov
命令时展开它们。将忽略输入写为
__ignoreinput=( '/opt/*' '/usr/include/*' '*3rdParty/*' '*Input_API/*' '*Grammars/*' )
下面所做的工作应该如预期的那样有效
"${__lcov}" "${__gcovopts}" --remove MYCODE.info "${__ignoreinput[@]}" -o MYCODE_filtered.info 2>&1 > /dev/null
对于说明中的所有故障情况,将ignoreinput
设置为“.”“
下的一个完整字符串,但该命令要求将每个单词拆分为一个表达式。数组扩展“${uuu ignoreinput[@]}”
将数组中定义的每个单词按命令的预期作为单独的单词放置
在定义过程中还要小心地对数组中的单词进行单引号/双引号引用,因为如果缺少引号,
*
可能会进行路径名扩展,并扩展到每个路径下的文件名列表
另请参见如何将/dev/null 2>/dev/null
最小化为/dev/null 2>/dev/null
,或者在bash
中简单地&>/dev/null
另外,命名前缀为
\uuuu
的变量名也是一种不好的做法。与大多数语言一样,字符本身可以是有效的变量标识符。如上所示,建议将变量名完全括在{..}
周围。非常感谢您的帮助@Inian。事实上,它起了作用。我以为他们会分开。我认为lolololAlso是错误的,所以在定义过程中小心地单引号/双引号引用数组中的单词,因为缺少引号*可能会经历路径名扩展,并扩展到每个路径下的文件名列表。你是对的,我确实有这个问题,扩张确实发生了,我不知道为什么早些时候,伊尼安,有可能再问一个问题吗?新的如果我能在这里回答这个问题,或者如果它是一个新的问题,请另外问一个问题!
"${__lcov}" "${__gcovopts}" --remove MYCODE.info "${__ignoreinput[@]}" -o MYCODE_filtered.info 2>&1 > /dev/null