
Если я использую 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
распечататьтолькокогда возникают ошибки, препятствующие установке?
решение1
Страница руководства для 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
решение2
Мы столкнулись с той же проблемой. apt-get install -qq
Удаляет большую часть выходных данных, но раздражающая надпись "(Чтение базы данных ...)" все еще остается.
Мы посмотрели в исходный код apt и обнаружили, что вывод производится dpkg, который был форкнут apt. Затем исходный код dpkg показывает, что раздражающий soutput выдается только тогда, когда isatty(1) имеет значение true. Это происходит только в том случае, когда форк использует pty вместо pipe. Возвращаясь к apt, есть недокументированная переменная конфигурации, которая позволяет использовать pipe вместо pty, что решает проблему:
apt-get install -qq -o=Dpkg::Use-Pty=0 <packages>
Ожидание этого может помочь другим.
решение3
Это может сделать простое перенаправление. Это не совсем то, что вы имели в виду, я уверен, но это чертовски хорошо работает :)
Короче говоря, просто хлопните > /dev/null
по концу любой команды, где вы хотите перенаправить все stdout
в ничто. Выведенные данные stderr
все равно будут отображаться в консоли.
$ sudo apt-get update > /dev/null
[sudo] password for oli:
$
Никакого хлама! А вот что случится, если мы сглупим и что-нибудь сломаем:
$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
решение4
С помощью apt-get -qq install -y PACKAGE 2> /dev/null
вы можете:
- Показывать только ошибки с
-qq
. - Отправьте ошибки
/dev/null
(не показывать), чтобы с их помощью можно было установить пакет с нулевым выводом.