Никогда не синхронизируйте базу данных, не обновляя Ваши пакеты. Всегда используйте pacman -Syu
, иначе можно испытать вид поломки, которую Вы видите.
По существу Вы сказали pacman обновляться, это - список локальных баз данных для определенного пакета и не обновило любой из других пакетов (который может совместно использовать библиотеки), одновременно. Поэтому частичные обновления не поддерживаются.
Можно считать притчу грустного пользователя, который попал в это прерывание для более конкретного примера.
Вы можете попытаться извлечь значения с GREP и SED. Например:
filename="$HOME/kernelbuild/linux-3.14.37/Makefile"
version=$(grep -m 1 VERSION $filename | sed 's/^.*= //g')
Это Greps для первого возникновения «версии» в Makefile
Если вам нужны просто простые вещи, такие как ваш пример, просто GREP
их из визирования.
Для более сложных вещей GNU имеет вариант -P
-P
, который печатает базу данных после запуска, которая включает в себя все определения переменной (и намного больше). Вы можете использовать его вместе с -N
, что вызывает действия, которые на самом деле не выполняется (поэтому ничего не создается). Вы можете GREP
VREP
Переменные из -P
вывод.
Сделать может прочитать makefile из stdin, чтобы вы могли дать ему документ , который является Makefile. Ниже приведен makefile, который включает в себя Makefile Chernel и добавляет новую цель подстановки, %. Var
, чья рецепт будет выводить значение данной переменной. (Это предполагает, что у вас нет файлов или других целей, которые заканчиваются .var
, конечно).
showvar() {
make -f - ${1}.var <<'EOF'
include $(HOME)/kernelbuild/linux-3.14.37/Makefile
%.var:
@echo $($*)
EOF
}
my_version=$(showvar VERSION)
patchlevel=$(showvar PATCHLEVEL)
the_sublevel=$(showvar SUBLEVEL)
Сделать заменить $ *
с стеблем %. Var
Цель.
Линия рецепта @echo
начинается с фактической вкладки .