Come posso rendere l’installazione di apt-get meno rumorosa?

Se uso apt-get install -qq mono-devel , mi aspetto che sia tranquillo tranne che per gli errori, secondo l’aiuto:

 -qq No output except for errors 

Invece ottengo:

 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. 

e altro ancora

In effetti, un paio di centinaia di righe vale la pena di uscita. Questo non sembra corrispondere con no output except for errors .

Come faccio a ottenere apt-get install per stampare solo quando ci sono errori che impediscono l’installazione?

La pagina man per apt-get è la seguente:

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

Il flag -q o -qq dovrebbe andare prima del comando, in questo modo:

apt-get -qq upgrade

Un semplice reindirizzamento potrebbe farlo. Non è esattamente quello che avevi in ​​mente, ne sono sicuro, ma sicuramente funziona 🙂

In breve, whack > /dev/null alla fine di ogni comando in cui si desidera redirect tutto lo stdout nel nulla. Le cose in uscita su stderr verranno comunque mostrate nella console.

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

Niente spazzatura! Ed ecco cosa succede se siamo stupidi e rompiamo qualcosa:

 $ apt-get cheese > /dev/null E: Invalid operation cheese $ 

Abbiamo affrontato lo stesso problema. apt-get install -qq rimuove la maggior parte degli output ma fastidioso “(Reading database …” persiste ancora.

Abbiamo dato un’occhiata alla sorgente di apt e abbiamo scoperto che l’output è prodotto da dpkg che è stato biforcato da apt. Quindi la fonte di dpkg mostra che il fastidioso soutput viene emesso solo quando isatty (1) è true. Questo è solo il caso in cui la fork usa pty invece pipe. Tornando ad apt, c’è una variabile di configurazione non documentata che permette di usare pipe invece pty che poi risolve il problema:

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

Aspettarsi che possa aiutare gli altri.