Jak sprawić, aby instalacja apt-get była mniej głośna?

128

Jeśli używam apt-get install -qq mono-devel, oczekuję, że będzie cicho, z wyjątkiem błędów, zgodnie z pomocą:

-qq No output except for errors

Zamiast tego otrzymuję:

Extracting templates from packages: 100%
Selecting previously unselected package binfmt-support.
(Reading database ... 84711 files and directories currently installed.)
Unpacking binfmt-support (from .../binfmt-support_2.0.8_i386.deb) ...
Selecting previously unselected package cli-common.
Unpacking cli-common (from .../cli-common_0.8.2_all.deb) ...
Selecting previously unselected package libgdiplus.
Unpacking libgdiplus (from .../libgdiplus_2.10-3_i386.deb) ...
Selecting previously unselected package libmono-2.0-1.
Unpacking libmono-2.0-1 (from .../libmono-2.0-1_2.10.8.1-1ubuntu2.2_i386.deb) ...
Selecting previously unselected package libmono-2.0-dev.
Unpacking libmono-2.0-dev (from .../libmono-2.0-dev_2.10.8.1-1ubuntu2.2_i386.deb) ...
Selecting previously unselected package libmono-corlib4.0-cil.
Unpacking libmono-corlib4.0-cil (from .../libmono-corlib4.0-cil_2.10.8.1-1ubuntu2.2_all.deb) ...
Selecting previously unselected package libmono-system-xml4.0-cil.
Unpacking libmono-system-xml4.0-cil (from .../libmono-system-xml4.

i więcej ...

W rzeczywistości wartość wyjściowa to kilkaset linii. To nie wydaje się pasować do no output except for errors.

Jak mogę apt-get installwydrukować tylko wtedy, gdy wystąpią błędy uniemożliwiające instalację?

jbtule
źródło
Próbowałeś użyć -q = # gdzie # to cichy poziom? (Jest w instrukcji.) Możesz zgłosić błąd w tej sprawie.
Paddy Landau
@PaddyLandau I rzeczywiście. Nie wiem, dlaczego chodzi o wybranie wcześniej niewybranego pakietu ani dlaczego jest to ważne, i nie jestem pewien, czy ma to związek ze stanem vms, na którym działam na nich na travis-ci . Ale odpowiedź zadziałała dobrze.
jbtule
„Wybór wcześniej niewybranego pakietu” oznacza po prostu, że menedżer pakietów zawiera pakiet wymagany do spełnienia zależności. Jak już pisałem, możesz chcieć zgłosić raport o błędzie dotyczący --quietopcji, która wydaje się nie działać poprawnie.
Paddy Landau
Jestem niezadowolony z tego samego objawu w Ubuntu 15.04 20150709.
Lloyd Dewolf
Wygląda na to, że odnosi się to do raportu o problemie z dpkg 2009: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf,

Odpowiedzi:

83

Strona podręcznika dla apt-get jest następująca:

NAME
       apt-get - APT package handling utility -- command-line interface

SYNOPSIS
       apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file] [-t=target_release]
               [-a=architecture] {update | upgrade | dselect-upgrade | dist-upgrade |
               install pkg [{=pkg_version_number | /target_release}]...  | remove pkg...  |
               purge pkg...  | source pkg [{=pkg_version_number | /target_release}]...  |
               build-dep pkg [{=pkg_version_number | /target_release}]...  |
               download pkg [{=pkg_version_number | /target_release}]...  | check | clean |
               autoclean | autoremove | {-v | --version} | {-h | --help}}

-qLub -qqflaga powinna iść przed poleceniem, tak jak poniżej:

apt-get -qq upgrade

Mikrofon
źródło
3
To poprawna odpowiedź! Wszelkie praktyczne wdrożenie musi zachować podpowiedzi. Prawidłowo użyty, -qabsolutnie działa (bez wyjścia „animowanego”), a także -qq(bez wyjścia z wyjątkiem błędów). Proszę głosować!
Charney Kaye,
27
Nie, to nie działa. Nawet -qqprzed poleceniem instalacji wciąż mam mnóstwo śmieci, od czytania bazy danych po rozpakowywanie i konfigurowanie wiadomości.
CrazyCasta,
2
Cóż, próbowałem sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercuriali inne warianty obejmujące nawet więcej znaków q (choć nie widzę żadnej dokumentacji, która sugeruje, to będzie działać. Używam Debiana Jessie na Google Cloud btw (8). Próbowałem zostały również na Goetz odpowiedź i wydaje się, że też nie działa. Przez wydaje się, że nie działa, to znaczy nie zauważam różnicy
CrazyCasta
3
To jest Ubuntu 16.04.1, działający jako kontener Docker. Domyślam się, że wiadomości faktycznie pochodzą z dpkg, co jest wywoływane przez apt-get. Poleceniem jest apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Zobacz gist.github.com/stefanlasiewski/…
Stefan Lasiewski,
3
W Dockerze masz 2 możliwości: (1) uruchom każdą komendę osobno, a nie &&łącząc się z nimi (może działać, ale to nie jest „sposób dokera”) (2) przekieruj wyjście do / dev / null, jak w drugiej odpowiedzi. Opcja 2 jest prawdopodobnie najlepszym wyborem, gdy występuje ten błąd.
Mike
54

Może to zrobić proste przekierowanie. Nie jestem dokładnie tym, o czym myślałeś, ale jestem pewien, że działa jak diabli :)

Krótko mówiąc, po prostu uderz > /dev/nullna końcu dowolnego polecenia, w którym chcesz przekierować wszystko stdoutw nicość. Rzeczy stderrwyświetlane na ekranie będą nadal wyświetlane w konsoli.

$ sudo apt-get update > /dev/null
[sudo] password for oli: 
$ 

Bez śmieci! A oto co się stanie, jeśli będziemy głupi i coś złamiemy:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Oli
źródło
7
To trochę problem, jeśli pojawi się monit ...
l0b0
1
Jeśli jest to część skryptu, nie postawiłbyś go sudoprzed apt-get. Zrobiłbyś to sudopo prostu podczas uruchamiania skryptu.
Xion
3
@Oli Jeśli jesteś absolutnie pewien, że nie zamierzasz zapalić systemu, zawsze możesz sudo apt-get upgrade -qq --force-yes > /dev/null. -qqimplikuje -y, jak powiedział WulfHart, i --force-yessprawia, że ​​przebija prawie wszystko.
JamesTheAwesomeDude
2
@Vorac Nie, to po prostu przekierowanie stdout(zauważenie błędów jest pożądaną rzeczą IMO).
Oli
3
To nie jest odpowiedź na pytanie; to obejście.
Charney Kaye,
42

Napotkaliśmy ten sam problem. apt-get install -qqusuwa większość danych wyjściowych, ale irytujące „(Odczytywanie bazy danych ...” nadal występuje).

Przyjrzeliśmy się źródłu apt i odkryliśmy, że dane wyjściowe są generowane przez dpkg, który został rozwidlony przez apt. Następnie źródło dpkg pokazuje, że irytujące soutput jest wydawane tylko wtedy, gdy isatty (1) jest prawdziwe. Dzieje się tak tylko wtedy, gdy widelec używa pty zamiast rury. Wracając do apt, istnieje nieudokumentowana zmienna konfiguracyjna, która pozwala na użycie potoku zamiast pty, który następnie rozwiązuje problem:

apt-get install -qq -o=Dpkg::Use-Pty=0 <packages>

Oczekiwanie, że może to pomóc innym.

Philippe Goetz
źródło
2
W rzeczywistości jest to pełna poprawna odpowiedź. To również pozwoli uruchomić apt-get z pojedynczym -q i zobaczyć jakieś wyjście i nie zobaczyć irytujące „Odczytywanie bazy danych”
valodzka
1
Próbuję tego na gcloud debian jessie (8) i nadal dostaję czytanie linii bazy danych i rozpakowywanie / konfigurowanie linii.
CrazyCasta
3
Ta odpowiedź nie działa w systemie Ubuntu 18.04.
Amedee Van Gasse,
1
Ciągle jest jeszcze wybór / przygotowanie / konfiguracja linii ...
Hayd
1
-o=Dpkg::Use-Pty=0Pracował idealnie na Ubuntu 18.04. Pokazuje tylko jedną „Czytanie bazy danych” zamiast wielu z aktualizacjami postępu co 5%.
wisbucky
2

Jak widać tutaj i tutaj,
możesz:

export DEBIAN_FRONTEND=noninteractive
apt-get -yq install [packagename]
export DEBIAN_FRONTEND=dialog

Lub jedna linia:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
znak
źródło