Comment rendre apt-get install moins bruyant?

128

Si j'utilise apt-get install -qq mono-devel, je m'attends à ce qu'il soit silencieux, à l'exception des erreurs, selon l'aide:

-qq No output except for errors

Au lieu de cela je reçois:

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.

et plus encore ...

En fait, quelques centaines de lignes de sortie. Cela ne semble pas correspondre avec no output except for errors.

Comment puis-je réellement apt-get installimprimer uniquement en cas d'erreur empêchant l'installation?

jbtule
la source
Avez-vous essayé d'utiliser -q = # où # est un niveau silencieux? (C'est dans le manuel.) Vous voudrez peut-être générer un rapport de bogue contre cela.
Paddy Landau
@PaddyLandau je l'ai fait en effet. Je ne sais pas pourquoi il est question de sélectionner un paquet précédemment non sélectionné ou pourquoi cela serait important, et je ne suis pas sûr que cela soit lié à l'état du vms que j'utilise pour cela sur travis-ci . Mais la réponse a bien fonctionné.
Jbtule
"Sélectionner un paquet précédemment non sélectionné" signifie simplement que le gestionnaire de paquet inclut un paquet requis pour satisfaire les dépendances. Comme je l'ai écrit précédemment, vous souhaiterez peut-être générer un rapport de bogue indiquant que l' --quietoption ne semble pas fonctionner correctement.
Paddy Landau
Je suis malheureux de signaler ce même symptôme dans Ubuntu le 15.04 20150709.
Lloyd Dewolf
Il semble que cela se rapporte au rapport de problème 2009 de dpkg: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf

Réponses:

83

La page de manuel d'apt-get est la suivante:

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}}

Le drapeau -qou -qqdevrait aller avant la commande, comme ceci:

apt-get -qq upgrade

Mike
la source
3
C'est la bonne réponse! Toute mise en œuvre pratique doit conserver les invites. Utilisé correctement, -qfonctionne absolument (pas de sortie "animée") ainsi que -qq(pas de sortie sauf les erreurs). S'il vous plaît upvote!
Charney Kaye
27
Non, ça ne marche pas. Même -qqavant la commande d’installation, je reçois toujours des tonnes de courrier indésirable, de la lecture de la base de données à la décompression et à la configuration des messages.
CrazyCasta
2
Eh bien, je l' ai essayé sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercurialet d' autres variations impliquant encore plus q de (bien que je ne vois pas la documentation qui suggère cela fonctionnerait. Je suis sous Debian Jessie sur Google Cloud BTW (8). J'ai aussi essayé Goetz de réponse et cela ne semble pas fonctionner non plus. Par ne semble pas fonctionner, je veux dire, je ne remarque pas de différence.
CrazyCasta
3
C'est Ubuntu 16.04.1, fonctionnant en tant que conteneur Docker. J'imagine que les messages proviennent en fait de l' dpkgappelant apt-get. La commande est apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Voir gist.github.com/stefanlasiewski/…
Stefan Lasiewski
3
Dans Docker, vous avez 2 possibilités: (1) exécuter chaque commande séparément plutôt que de les &&joindre (cela peut fonctionner, mais ce n'est pas la "méthode du docker") (2) rediriger la sortie vers / dev / null comme dans l'autre réponse. L'option 2 est probablement votre meilleur choix tant qu'il y a ce bug.
Mike
55

Une simple redirection pourrait le faire. Ce n'est pas exactement ce que vous aviez en tête, j'en suis sûr, mais ça marche comme l'enfer :)

En bref, il suffit de frapper > /dev/nullà la fin de toute commande où vous voulez rediriger tout le stdoutnéant. Les éléments stderraffichés apparaîtront toujours dans la console.

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

Aucune ordure! Et voici ce qui se passe si nous sommes stupides et casser quelque chose:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Oli
la source
7
C'est un peu un problème si vous obtenez une invite ...
l0b0
1
Si cela fait partie d'un script, vous ne mettriez pas sudode devant apt-get. Vous le feriez simplement sudoen exécutant le script.
Xion
3
@ Oli Si vous êtes absolument certain de ne pas mettre le feu à votre système, vous pouvez toujours le faire sudo apt-get upgrade -qq --force-yes > /dev/null. comme le dit WulfHart, cela -qqimplique -yet supprime --force-yesà peu près tout.
JamesTheAwesomeDude
2
@Vorac Non, il s'agit simplement d'une redirection stdout(voir les erreurs est une chose souhaitable, OMI).
Oli
3
Ce n'est pas la réponse à la question. c'est une solution de contournement.
Charney Kaye
42

Nous avons rencontré le même problème. apt-get install -qqsupprime la plupart des sorties mais "(lecture de la base de données ...") est toujours ennuyant.

Nous avons examiné la source d'apt et découvert que la sortie est produite par dpkg, qui a été créé par apt. Ensuite, la source de dpkg montre que la soutput agaçante n’est émise que lorsque isatty (1) est vrai. Ce n'est le cas que lorsque la fourche utilise pty à la place de pipe. De retour à apt, il existe une variable de configuration non documentée qui permet d'utiliser pipe au lieu de pty, ce qui résout ensuite le problème:

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

S'attendre à cela peut aider les autres.

Philippe Goetz
la source
2
En fait, c'est la réponse correcte. Il permet également de lancer apt-get avec single -q et de voir une sortie sans voir la "base de données de lecture"
agaçante
1
J'essaie ceci sur gcloud debian jessie (8) et je lis toujours les lignes de base de données et les lignes de décompression / configuration.
CrazyCasta
3
Cette réponse ne fonctionne pas pour Ubuntu 18.04.
Amédée Van Gasse
1
Il y a encore un tas de lignes de sélection / préparation / mise en place ...
hayd
1
Le -o=Dpkg::Use-Pty=0parfait travaillé sur Ubuntu 18.04. Il ne montre qu'une "base de données de lecture" au lieu de plusieurs avec des mises à jour de progression tous les 5%.
Wisbucky le
2

Comme vous pouvez le voir ici et ici,
vous pouvez faire:

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

Ou une ligne:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
marque
la source