Как мне сделать apt-get install менее шумной?

128

Если я использую apt-get install -qq mono-devel, я ожидаю, что это будет тихо, за исключением ошибок, согласно справке:

-qq No output except for errors

Вместо этого я получаю:

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.

и многое другое ...

Фактически, пара сотен строк стоит вывода. Это не совпадает с no output except for errors.

Как мне на самом деле получить apt-get installраспечатать только тогда, когда есть ошибки, препятствующие его установке?

jbtule
источник
Вы пытались использовать -q = # где # тихий уровень? (Это в руководстве.) Вы можете поднять отчет об ошибке против этого.
Пэдди Ландау
@PaddyLandau Я действительно сделал. Я не знаю, почему речь идет о выборе ранее невыбранного пакета, или почему это важно, и я не уверен, связано ли это с состоянием виртуальных машин, на которых я запускаю эти файлы , travis-ci . Но ответ сработал хорошо.
13:30
«Выбор ранее невыбранного пакета» просто означает, что менеджер пакетов включает пакет, необходимый для удовлетворения зависимостей. Как я уже писал ранее, вы можете поднять отчет об ошибке, если --quietопция не работает должным образом.
Пэдди Ландау
Мне не нравится сообщать об этом же симптоме в Ubuntu 15.04 20150709.
Ллойд Дьюольф
Похоже, это относится к отчету о проблеме dpkg за 2009 год: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Ллойд Дьюольф

Ответы:

83

Страница man для apt-get выглядит следующим образом:

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

-qИли -qqфлаг должен прежде , чем команда, так как:

apt-get -qq upgrade

Майк
источник
3
Это правильный ответ! Любая практическая реализация должна сохранять подсказки. Используется правильно, -qабсолютно работает (без «анимированного» вывода), а также -qq(без вывода без ошибок). Пожалуйста, проголосуйте!
Чарни Кей
27
Нет, это не работает. Даже с -qqкомандой до установки я все еще получаю тонны мусора от чтения базы данных до распаковки и настройки сообщений.
CrazyCasta
2
Ну, я пытался sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercurialи другие вариации , связанные с еще более д (хотя я не вижу какой - либо документации , которая предполагает , что это будет работать. Я бегу Debian Jessie на Google Cloud КСТАТИ (8). Я также попытался Гетц ответ, и это, кажется, не работает. Похоже, не работает, я имею в виду, я не замечаю разницы
CrazyCasta
3
Это Ubuntu 16.04.1, работающий как контейнер Docker. Я думаю, что сообщения на самом деле от dpkg, который вызывается apt-get. Команда есть apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. См. Gist.github.com/stefanlasiewski/…
Стефан Ласевский
3
В Docker у вас есть 2 варианта: (1) запускать каждую команду отдельно, а не &&соединяя их (может работать, но это не «путь docker») (2) перенаправить вывод в / dev / null, как в другом ответе. Вариант 2, вероятно, ваш лучший выбор, когда есть эта ошибка.
Майк
55

Простое перенаправление может сделать это. Я уверен, что это не совсем то, что вы имели в виду, но, черт возьми, это точно работает :)

Короче говоря, просто ударить > /dev/nullв конце любой команды, где вы хотите перенаправить все stdoutв пустоту. Вещи, выведенные на stderrвсе равно будут отображаться в консоли.

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

Нет мусора! И вот что происходит, если мы глупы и что-то сломаем:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Оли
источник
7
Это небольшая проблема, если вы получаете подсказку ...
l0b0
1
Если это часть сценария, вы не ставите sudoперед ним apt-get. Вы бы просто sudoпри запуске сценария вместо этого.
Сион,
3
@Oli Если вы абсолютно уверены, что ваша система не загорится, вы всегда можете это сделать sudo apt-get upgrade -qq --force-yes > /dev/null. -qqподразумевает -y, как сказал Вульфхарт, и --force-yesзаставляет его пахать практически во всем.
JamesTheAwesomeDude
2
@Vorac Нет, это просто перенаправление stdout(просмотр сообщений об ошибках является желательным для IMO).
Оли
3
Это не ответ на вопрос; это обходной путь.
Чарни Кей
42

Мы столкнулись с той же проблемой. apt-get install -qqудаляет большую часть выходных данных, но раздражающее "(Чтение базы данных ..." по-прежнему сохраняется.

Мы посмотрели на источник apt и обнаружили, что вывод производится dpkg, который был разветвлен apt. Затем источник dpkg показывает, что раздражающий soutput выдается только тогда, когда isatty (1) имеет значение true. Это только тот случай, когда вилка использует pty вместо pipe. Возвращаясь к apt, есть недокументированная переменная конфигурации, которая позволяет использовать трубу вместо pty, которая затем решает проблему:

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

Ожидая, что может помочь другим.

Филипп Гетц
источник
2
На самом деле это полный правильный ответ. Это также позволяет запускать apt-get с одиночным ключом -q и видеть некоторые результаты и не видеть раздражающее «Чтение базы данных»
valodzka
1
Я пытаюсь это сделать в gcloud debian jessie (8), и я все еще получаю чтение строк базы данных и распаковку / настройку строк.
CrazyCasta
3
Этот ответ не работает для Ubuntu 18.04.
Амеди Ван Гасс
1
Есть еще куча Выбор / Подготовка / Настройка строк ...
Хайд
1
-o=Dpkg::Use-Pty=0Работал отлично на Ubuntu 18.04. Он показывает только одну «Чтение базы данных» вместо нескольких с обновлениями прогресса каждые 5%.
Висбуки
2

Как вы можете видеть здесь и здесь,
вы можете сделать:

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

Или одна строка:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
отметка
источник