Например:
Следующая команда установит все пакеты, соответствующие ее шаблону:
sudo apt-get install k3b-*
Если я хочу использовать эту инструкцию, но не хочу устанавливать один конкретный пакет с нарушенными зависимостями, как мне это сделать?
Я пробовал это, но не работает.
sudo apt-get install "$ (apt-cache --no-generate pkgnames k3b | grep -v extrathemes | tr '\ n' '')":
sam@/home/sam/code/ros/ai/cram/roslisp_repl$ sudo apt-get install "$(apt-cache --no-generate pkgnames k3b | grep -v extrathemes | tr '\n' ' ')"
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package k3b-dbg k3b-data k3b
sam@/home/sam/code/ros/ai/cram/roslisp_repl$
Спасибо ~ [ 117]
Вы можете сделать
list=$(apt-cache --names-only search ^k3b-* | awk '{ print $1 }' | \
grep -v bad-pkg)
sudo apt-get install $list
Скажем, вы не хотите устанавливать пакет k3b-extrathemes. Не может быть практического способа сделать это, кроме как перечислить все пакеты, кроме одного: sudo apt-get install k3b-data k3b-dbg
.
Тем не менее, вы можете сделать это с некоторой помощью:
sudo apt-get install $(apt-cache --no-generate pkgnames k3b \
| grep -v extrathemes | tr '\n' ' ')
Это не очень частично. apt-cache ...
возвращает имя пакетов, grep -v PACKAGENAME
исключает пакеты, а команда tr
заменяет новые строки пробелами.
Я обнаружил гораздо более простой способ сделать это:
sudo aptitude install <package>
Это будет использовать aptitude
вместо apt-get
- который предоставляет вам больше вариантов. Когда вы видите что-то вроде следующего:
The following NEW packages will be installed:
...
0 packages upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 130 MB/130 MB of archives. After unpacking 216 MB will be used.
Do you want to continue? [Y/n/?]
Вместо того, чтобы нажимать «y», введите следующее:
-<package_to_skip>
Это «-», за которым следует имя пакета для пропускать. Затем вы можете продолжить установку как обычно.
Вы можете тривиально сделать это с помощью apt; если вы хотите установить foo
, но не bar
, сделайте это:
sudo apt install foo bar-
т.е. добавить дефис к bar
. Со страницы руководства apt-get:
Если к имени пакета добавляется дефис (без пробела), указанный пакет будет удален, если он установлен. Точно так же знак плюс может использоваться для обозначения пакета для установки.
blockquote>Это очевидно работает для пакетов, которые будут установлены, а также для тех, которые уже установлены.