Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash lcov代码覆盖率--带有输入变量的remove命令不起作用 问题描述_Bash_Lcov - Fatal编程技术网

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