У меня была такая же проблема в OpenSUSE 42.3 с приложениями GTK 2.0. При поиске решения я часто натыкался на unity
, а на форумах Ubuntu есть сообщение , в котором говорится, что это ошибка Unity .
Поскольку я не использую Unity, я попытался удалить связанные пакеты. Для меня пакеты для удаления были unity-gtk2-module
, unity-gtk3-module
и unity-gtk-module-common
. Удаление этих пакетов решило мою проблему. Все строки меню вернулись после следующего входа в систему.
Мне удалось воспроизвести проблему. Это проблема экранирования bash в двух функциях. Попробуйте это:
generate_exclude_extensions() {
echo '(cpp$'
}
generate_exclude_dirs() {
echo '|^test)'
}
command=$(generate_exclude_extensions)$(generate_exclude_dirs)
echo "$command"
git ls-files | grep -vEe "$command"
мой код для воспроизведения
generate_exclude_extensions() {
echo '(cpp$'
}
generate_exclude_dirs() {
echo '|^test)'
}
command=$(generate_exclude_extensions)$(generate_exclude_dirs)
echo "$command"
echo -e 'cpp\n
test\n
test456\n
display?5\n' | grep -vEe "$command"
В вашем сценарии также есть две опечатки
generate_exclude_dir -> generate_exclude_dirs
generate_exclud_extensions -> generate_exclude_extensions
:)весело провести время
Другим подходом может быть:
generate_exclude_extensions() {
echo 'cpp$'
}
generate_exclude_dirs() {
echo '^test'
}
exclusions=$(
generate_exclude_extensions
generate_exclude_dir
)
printf '%s\n' "$exclusions"
git ls-files | grep -ve "$exclusions"
То есть одно исключение на строку, и тогда вам даже не нужно -E
.
Вы можете использовать Gitexclude
pathspecs для фильтрации вывода:
exclude_extensions=( '*cpp' '*.txt' ) # added `*.txt` as sample file extension
exclude_dirs=( 'test/*' ) # exclude files in relative directory `test`
git ls-files "${exclude_extensions[@]/#/:(exclude)}" "${exclude_dirs[@]/#/:(exclude)}"
Расширение параметра "${exclude_...[@]/#/:(exclude)}"
расширяется до элементов массива, разделенных пробелами, с префиксом :(
, спецификацией пути "волшебное слово" exclude
, за которой следует )
.
Результирующая команда эквивалентна
git ls-files ':(exclude)*cpp' ':(exclude)*.txt' ':(exclude)test/*'