¿Cómo hago que apt-get install sea menos ruidoso?

128

Si lo uso apt-get install -qq mono-devel, espero que sea silencioso, excepto por errores, según la ayuda:

-qq No output except for errors

En cambio obtengo:

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.

y mas ...

De hecho, un par de cientos de líneas de producción. Esto no parece coincidir con no output except for errors.

¿Cómo puedo apt-get installimprimir solo cuando hay errores que impiden que se instale?

jbtule
fuente
¿Has intentado usar -q = # donde # es un nivel silencioso? (Está en el manual.) Es posible que desee generar un informe de error en contra de esto.
Paddy Landau
@ PaddyLandau lo hice de hecho. No sé por qué se trata de seleccionar un paquete no seleccionado previamente o por qué eso sería importante, y no estoy seguro de si está relacionado con el estado de los vms que estoy ejecutando en estos, travis-ci . Pero la respuesta funcionó bien.
jbtule
"Seleccionar un paquete no seleccionado previamente" simplemente significa que el administrador de paquetes incluye un paquete requerido para satisfacer las dependencias. Como escribí anteriormente, es posible que desee generar un informe de error sobre la --quietopción que parece no funcionar correctamente.
Paddy Landau
No estoy contento de informar ese mismo síntoma en Ubuntu 15.04 20150709.
Lloyd Dewolf
Parece que esto se relaciona con el informe de problema dpkg 2009: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf

Respuestas:

83

La página del manual para apt-get es la siguiente:

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

La bandera -qo -qqdebe ir antes del comando, así:

apt-get -qq upgrade

Miguel
fuente
3
¡Esta es la respuesta correcta! Cualquier implementación práctica debe preservar las indicaciones. Utilizado correctamente, -qfunciona absolutamente (sin salida "animada") y -qq(sin salida excepto errores). ¡Por favor vota!
Charney Kaye
27
No, no funciona Incluso -qqantes del comando de instalación, todavía recibo toneladas de basura, desde leer la base de datos hasta desempacar y configurar mensajes.
CrazyCasta
2
Bueno, lo he intentado sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercurialy otras variaciones que implican aún más de (aunque no veo ninguna documentación que sugiere que esto funcionaría. Estoy corriendo Debian Jessie en la nube de Google por cierto (8). También he intentado q Goetz de respondo y tampoco parece funcionar. Por no parece funcionar quiero decir que no noto una diferencia.
CrazyCasta
3
Esto es Ubuntu 16.04.1, ejecutándose como un contenedor Docker. Mi suposición es que los mensajes son en realidad de dpkg, que es llamado por apt-get. El comando es apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Ver gist.github.com/stefanlasiewski/…
Stefan Lasiewski
3
En Docker tiene 2 alternativas: (1) ejecutar cada comando por separado en lugar de &&unirlos (podría funcionar, pero no es la "forma de docker") (2) redirigir la salida a / dev / null como en la otra respuesta. La opción 2 es probablemente su mejor opción mientras exista este error.
Mike
55

Una simple redirección podría hacer esto. No es exactamente lo que tenía en mente, estoy seguro, pero seguro que funciona :)

En resumen, simplemente golpee > /dev/nullal final de cualquier comando donde desee redirigir todo a la stdoutnada. Las cosas que stderrse muestran aparecerán en la consola.

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

No basura! Y esto es lo que sucede si somos tontos y rompemos algo:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Oli
fuente
77
Eso es un pequeño problema si recibes un aviso ...
l0b0
1
Si esto es parte de un script, no pondrías un sudofrente apt-get. Solo lo haría sudocuando ejecute el script.
Xion
3
@Oli Si está absolutamente seguro de que no hará que su sistema se incendie, siempre podría hacerlo sudo apt-get upgrade -qq --force-yes > /dev/null. -qqimplica -y, como dijo WulfHart, y --force-yeshace que pase por casi cualquier cosa.
JamesTheAwesomeDude
2
@Vorac No, solo se está redirigiendo stdout(ver los errores es algo deseable en mi opinión).
Oli
3
Esta no es la respuesta a la pregunta; Es una solución alternativa.
Charney Kaye
42

Nos enfrentamos al mismo problema. apt-get install -qqelimina la mayoría de las salidas pero aún persiste el molesto "(leyendo la base de datos ...".

Echamos un vistazo a la fuente de apt y descubrimos que el resultado es producido por dpkg que fue bifurcado por apt. Entonces, la fuente de dpkg muestra que el molesto sureput solo se emite cuando isatty (1) es cierto. Este es solo el caso cuando la bifurcación usa pty en lugar de tubería. Volviendo a apt, hay una variable de configuración no documentada que permite usar pipe en lugar de pty que luego resuelve el problema:

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

Esperar que pueda ayudar a otros.

Philippe Goetz
fuente
2
En realidad, esta es la respuesta correcta completa. También permite ejecutar apt-get con single -q y ver algunos resultados y no ver la molesta "Base de datos de lectura"
valodzka
1
Estoy intentando esto en gcloud debian jessie (8) y sigo leyendo líneas de bases de datos y desempacando / configurando líneas.
CrazyCasta
3
Esta respuesta no funciona para Ubuntu 18.04.
Amedee Van Gasse
1
Todavía hay un montón de líneas de selección / preparación / configuración ...
hayd
1
La -o=Dpkg::Use-Pty=0funcionaba perfecto en Ubuntu 18.04. Solo muestra una "Base de datos de lectura" en lugar de varias con actualizaciones de progreso cada 5%.
wisbucky
2

Como puedes ver aquí y aquí
puedes hacer:

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

O una linea:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
marca
fuente