Один простой способ передать __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
задается как одна целая строка в ".."
, но команда ожидает, что слова разбивают по одному выражению для каждого. Расширение массива "${__ignoreinput[@]}"
, однако, помещает каждое слово, определенное в массиве, как отдельное слово, как и ожидалось командой.
Также тщательно ставьте одинарные / двойные кавычки слов в массиве во время определения, потому что при отсутствии кавычек *
может подвергаться расширению имени пути и может расширяться до списка имен файлов под каждым из этих путей.
Также посмотрите, как > /dev/null 2> /dev/null
можно уменьшить до > /dev/null 2> /dev/null
или просто &> /dev/null
в bash
.
Имена имен переменных с префиксом __
также являются плохой практикой. Как и большинство языков, сам символ может быть допустимым идентификатором переменной. Как показано выше, рекомендуется указывать имя переменной полностью вокруг {..}
.