Kontynuuj w razie błędu, gdy apt-get napotka instalację, która nie może zlokalizować problemu z pakietem

11

Po uruchomieniu następujących czynności:

sudo apt-get install vim abcde php5-cli

Nie udaje się wyświetlić następującego komunikatu, który jest oczekiwanym zachowaniem:

E: Nie można znaleźć pakietu abcde`.

Chcę go zainstalować, vima nawet jeśli wystąpi błąd, po abcdeprostu kontynuuj instalację php5-clipakietu. Czyli chcę apt-getkontynuować listę, nawet jeśli nie można znaleźć niektórych pakietów.

Próbowałem:

sudo apt-get install --ignore-missing vim abcde php5-cli
tbenz9
źródło

Odpowiedzi:

9

Krótka odpowiedź: możliwe, że tak naprawdę nie chcesz tego robić.

Dlaczego? Dużo dyskutowano na temat tej konkretnej funkcjonalności. Jednym z nich jest ten (duplikat) raport o błędzie i ten, z którym jest powiązany.

Dyskusja na temat raportu o błędzie wyjaśnia również, że „--ignore-missing” ma zastosowanie tylko wtedy, gdy występuje problem z pobraniem pakietu, który w przeciwnym razie powinien istnieć dzięki informacjom, które posiada „adapt-get”. Jest to również wyjaśnione tutaj i w dokumentacji.

Czy jest w pobliżu praca?

Jeśli po przeczytaniu poprzednich źródeł nadal jesteś pewien, że chcesz to zrobić, to z drugiej strony istnieją (nieoptymalne, ale raczej bezpieczne) opcje, takie jak ta określona przez użytkownika „Aleksandr Lewczuk” tutaj :

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

Lub jeśli wolisz, to jednowarstwowa z minimalną modyfikacją:

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

Jeśli jest dużo pakietów, możesz je dodać, -yaby nie wymagało wielokrotnego potwierdzenia:

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

Lub:

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

Mam nadzieję że to pomoże.

użytkownik391035
źródło
Nawiasem mówiąc, jeśli jesteś kimś takim jak ja, który używa Fish zamiast Bash, najpierw musisz wpisać „bash”, aby przełączyć pociski. Następnie skopiuj i wklej polecenie, ponieważ z jakiegoś powodu nie zadziała powłoka Fish. Działa dobrze z Bash.
Ev-
1

Jednym ze sposobów obejścia tego jest wywołanie apt-get raz dla każdego pakietu :

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

Lub jako funkcja

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

install_ignore_fail package1 package2 package3
xjcl
źródło