Продолжить при ошибке, когда apt-get обнаруживает установку, не способную обнаружить проблему с пакетом

11

Когда я запускаю следующее:

sudo apt-get install vim abcde php5-cli

Это терпит неудачу со следующим сообщением, которое является ожидаемым поведением:

E: Невозможно найти пакет abcde`.

Я хочу, чтобы он установился, vimи даже в случае ошибки abcdeпросто продолжите установку php5-cliпакета. Это означает, что я хочу apt-getпродолжить вниз по списку, даже если он не может найти некоторые пакеты.

Я пробовал:

sudo apt-get install --ignore-missing vim abcde php5-cli
tbenz9
источник

Ответы:

9

Краткий ответ: вполне возможно, что вы на самом деле не хотите этого делать.

Это почему? Было много дискуссий об этой конкретной функциональности. Один из них содержится в этом (дублирующемся) отчете об ошибке и связан с ним.

Обсуждение в отчете об ошибке также объясняет, что «--ignore-missing» применяется только в том случае, если существует проблема с загрузкой пакета, который в противном случае должен существовать в соответствии с информацией, имеющейся у вашего «apt-get». Это также объясняется здесь и в документации.

Есть ли обходной путь?

Если после прочтения предыдущих источников вы все еще уверены, что хотите это сделать, то, с другой стороны, есть (неоптимальные, но довольно безопасные) варианты, подобные той, которая указана пользователем "Александр Левчук" здесь :

for i in package1 package2 package3; do
  sudo apt-get install $i
done

Или, если вы предпочитаете однострочник с минимальными изменениями:

for i in package1 package2 package3; do sudo apt-get install $i; done

Если пакетов много, вы можете добавить их, -yчтобы они не запрашивали подтверждение повторно:

for i in package1 package2 package3; do
  sudo apt-get install -y $i
done

Или:

for i in package1 package2 package3; do sudo apt-get install -y $i; done

Надеюсь это поможет.

user391035
источник
Кстати, если вы такой же, как я, который использует Fish вместо Bash, вам сначала нужно набрать «bash» для переключения оболочек. Затем скопируйте и вставьте команду, так как по какой-то причине она не будет работать в оболочке Fish. Работает нормально с Bash.
Ев-
1

Один из способов обойти это - вызвать apt-get один раз для каждого пакета :

echo package1 package2 package3 | xargs -n 1 sudo apt-get install -y

Или как функция

function install_ignore_fail { echo "$*" | xargs -n 1 sudo apt-get install -y; }

install_ignore_fail package1 package2 package3
xjcl
источник