Як зробити так, щоб apt-get встановив менш галасливий?


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роздрукувати лише тоді, коли є помилки, що запобігають встановленню?


Ви спробували використовувати -q = # де # тихий рівень? (Це в посібнику.) Ви можете створити звіт про помилку щодо цього.
Paddy Landau

@PaddyLandau я дійсно зробив. Я не знаю, чому мова йде про вибір раніше вибраного пакету або чому це було б важливо, і я не впевнений, чи це пов’язано зі станом vms, який я запускаю на них, або на будь-якому, традиційному . Але відповідь спрацювала добре.
jbtule

"Вибір раніше невибраного пакету" просто означає, що менеджер пакунків включає пакет, необхідний для задоволення залежностей. Як я вже писав раніше, ви можете підняти звіт про помилку щодо того, що --quietваріант, здається, працює неправильно.
Paddy Landau

Я незадоволений, щоб повідомити про той самий симптом в 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 у вас є дві альтернативи: (1) запускайте кожну команду окремо, а не &&приєднуючись до них (можливо, це працює, але це не "шлях докера") (2) перенаправляє вихід на / dev / null, як в іншій відповіді. Варіант 2 - це, мабуть, найкраща ставка, поки є ця помилка.
Майк

54

Просте перенаправлення могло це зробити. Це я точно не мав на увазі, я впевнений, але це впевнено, як працює пекло :)

Коротше кажучи, просто натисніть > /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замість цього запустили сценарій.
Xion

3
@Oli Якщо ви абсолютно впевнені, що не збираєтеся загартовувати вашу систему, ви завжди можете sudo apt-get upgrade -qq --force-yes > /dev/null. -qqозначає -y, як сказав Вульфхарт, і --force-yesзмушує орати майже все.
JamesTheAwesomeDude

2
@Vorac Ні, це просто перенаправлення stdout(бачити помилки - бажана річ ІМО).
Олі

3
Це не відповідь на запитання; це вирішення.
Чарні Кей

42

Ми зіткнулися з тією ж проблемою. apt-get install -qqвидаляє більшість результатів, але дратує "(Reading database ..." зберігається).

Ми подивилися на джерело apt та виявили, що вихід виробляється dpkg, який був роздвоєний apt. Тоді джерело dpkg показує, що дратівливий soutput видається лише тоді, коли isatty (1) відповідає дійсності. Це лише той випадок, коли вилка використовує pty замість труби. Назад до apt, є недокументована змінна конфігурація, яка дозволяє використовувати pipe замість pty, який потім вирішує проблему:

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

Очікуючи, що може допомогти іншим.


2
Насправді це повна правильна відповідь. Це також дозволяє запустити apt-get з single -q і побачити деякий вихід і не бачити дратує "Читання баз даних"
valodzka

1
Я намагаюся це зробити на gcloud debian jessie (8), і я все ще отримую читання ліній бази даних та розпакування / налаштування ліній.
CrazyCasta

3
Ця відповідь не працює для Ubuntu 18.04.
Амеді Ван Гассе

1
Там ще купа Вибір / Підготовка / Налаштування ліній ...
hayd

1
-o=Dpkg::Use-Pty=0Працював відмінно на Ubuntu 18.04. Він показує лише одну "Читання БД" замість декількох з оновленням прогресу кожні 5%.
wisbucky

2

Як ви бачите тут і тут
Ви можете зробити:

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

Або один рядок:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.