Como faço para instalar o apt-get menos barulhento?

128

Se eu usar apt-get install -qq mono-devel, espero que esteja silencioso, exceto por erros, de acordo com a ajuda:

-qq No output except for errors

Em vez disso, recebo:

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 mais ...

De fato, algumas centenas de linhas de saída. Isso não parece coincidir com no output except for errors.

Como realmente apt-get installimprimo apenas quando há erros que impedem a instalação?

jbtule
fonte
Você já tentou usar -q = # onde # é um nível silencioso? (Está no manual.) Você pode enviar um relatório de bug contra isso.
Paddy Landau
@PaddyLandau eu fiz de fato. Não sei por que está falando sobre a seleção de pacotes anteriormente não selecionados, ou por que isso seria importante, e não tenho certeza se está relacionado ao estado dos vms em que estou executando isso neles, travis-ci . Mas a resposta funcionou bem.
jbtule
"Selecionar pacote anteriormente não selecionado" significa simplesmente que o gerenciador de pacotes está incluindo um pacote necessário para satisfazer dependências. Como escrevi anteriormente, convém gerar um relatório de erro sobre a --quietopção que parece não estar funcionando corretamente.
Paddy Landau
Estou triste em informar que mesmo sintoma no Ubuntu 15.04 20150709.
Lloyd Dewolf
Parece que isso está relacionado ao relatório de problemas do dpkg de 2009: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf

Respostas:

83

A página de manual do apt-get é a seguinte:

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

O sinalizador -qou -qqdeve ir antes do comando, assim:

apt-get -qq upgrade

Mike
fonte
3
Essa é a resposta correta! Qualquer implementação prática precisa preservar os prompts. Quando usado corretamente, -qfunciona absolutamente (sem saída "animada") e -qq(sem saída, exceto erros). Por favor, vote!
precisa saber é o seguinte
27
Não, não funciona. Mesmo -qqantes do comando install, ainda recebo toneladas de lixo eletrônico, desde a leitura do banco de dados até a descompactação e a configuração de mensagens.
CrazyCasta
2
Bem, eu tentei sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercuriale outras variações envolvendo ainda mais de (embora eu não vejo nenhuma documentação que sugere que este iria funcionar. Estou executando Debian Jessie no google cloud btw (8). Eu também tentei q Goetz de responder e não parece que quer trabalhar não por não parecem funcionar quer dizer, eu não notar a diferença..
CrazyCasta
3
Este é o Ubuntu 16.04.1, executando como um contêiner do Docker. Meu palpite é que as mensagens são realmente de dpkg, o que é chamado por apt-get. O comando é apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Veja gist.github.com/stefanlasiewski/…
Stefan Lasiewski
3
No Docker, você tem 2 alternativas: (1) execute cada comando separadamente, em vez de &&juntá-los (pode funcionar, mas não é o "modo docker") (2) redirecione a saída para / dev / null, como na outra resposta. A opção 2 é provavelmente a sua melhor aposta enquanto houver esse bug.
Mike
55

Um redirecionamento simples pode fazer isso. Não é exatamente o que você tinha em mente, tenho certeza, mas com certeza funciona :)

Em resumo, basta clicar > /dev/nullno final de qualquer comando para o qual você deseja redirecionar tudo stdoutpara o nada. As coisas produzidas stderrainda serão exibidas no console.

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

Sem lixo! E aqui está o que acontece se formos bobos e quebrarmos algo:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Oli
fonte
7
Isso é um pouco de um problema se você receber um prompt ...
l0b0
1
Se isso faz parte de um script, você não colocaria um sudona frente apt-get. Você faria exatamente sudoao executar o script.
Xion
3
@Oli Se você tiver certeza absoluta de que não fará o seu sistema pegar fogo, você sempre poderá sudo apt-get upgrade -qq --force-yes > /dev/null. -qqimplica -y, como WulfHart disse, e --force-yesfaz com que ele passe por praticamente qualquer coisa.
26413 JamesTheAwesomeDude
2
@Vorac Não, é apenas redirecionar stdout(ver os erros é uma coisa desejável IMO).
Oli
3
Esta não é a resposta para a pergunta; é uma solução alternativa.
precisa saber é o seguinte
42

Enfrentamos o mesmo problema. apt-get install -qqremove a maioria das saídas, mas irritante "(Lendo banco de dados ..." ainda persiste.

Examinamos a fonte do apt e descobrimos que a saída é produzida pelo dpkg que foi bifurcada pelo apt. Então a fonte do dpkg mostra que a saída irritante só é emitida quando isatty (1) é verdadeiro. Este é apenas o caso quando o garfo usa o tubo pty. De volta ao apt, há uma variável de configuração não documentada que permite usar o pipe em vez do pty, que resolve o problema:

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

Esperar que possa ajudar os outros.

Philippe Goetz
fonte
2
Na verdade, esta é a resposta correta completa. É também permitem executar apt-get com único -q e veja alguns de saída e não vê irritante "Lendo banco de dados"
valodzka
1
Estou tentando isso no gcloud debian jessie (8) e continuo lendo linhas de banco de dados e descompactando / configurando linhas.
precisa saber é o seguinte
3
Esta resposta não funciona no Ubuntu 18.04.
Amedee Van Gasse
1
Ainda há um monte de Selecionando / Preparando / Configurando Linhas ...
hayd
1
O -o=Dpkg::Use-Pty=0funcionou perfeitamente no Ubuntu 18.04. Ele mostra apenas um "banco de dados de leitura" em vez de vários com atualizações de progresso a cada 5%.
wisbucky 18/07
2

Como você pode ver aqui e aqui,
você pode fazer:

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

Ou uma linha:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
Marca
fonte