Как я делаю склонными - получают менее шумную установку?

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

159
задан 20 February 2013 в 18:38

7 ответов

Man page for 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

93
ответ дан 20 February 2013 в 18:38

Это можно сделать с помощью простого перенаправления. Я уверен, что это не совсем то, что вы имели в виду, но он чертовски работает :)

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

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

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

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
59
ответ дан 20 February 2013 в 18:38

Мы столкнулись с той же проблемой. 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>

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

61
ответ дан 20 February 2013 в 18:38

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

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

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

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
3
ответ дан 20 February 2013 в 18:38

Вы можете использовать скрипт python, чтобы делать буквально все что угодно с stdout и stderr каждой команды. Например, если вы хотите видеть динамический вывод, включающий только последнюю строку вывода, вы можете использовать следующий сценарий:

#!/usr/bin/python3
import subprocess, sys
process = subprocess.Popen(sys.argv[1:], stdout=subprocess.PIPE)
while process.poll() is None:
  stdout = process.stdout.readline().decode()[:-1]
  print(stdout,end='\r')
print()

Если вы знаете, как работать со строками в python, вы можете настроить сценарий для печати только строки, которые вы хотите напечатать, в любом желаемом формате.

Сохраните приведенный выше код в файле, таком как run.py. Затем вы можете запустить любую команду, чтобы динамически видеть только последнюю строку вывода. Например:

./run.py sudo apt-get install <package>

или:

./run.py sudo apt-get update
Примечание 1: не забудьте дать разрешение exec для вашего скрипта:
chmod +x run.py
Примечание 2: вы можете создать правильную символическую ссылку для более удобного использования (или, в качестве альтернативы, добавьте путь сценария к переменной среды $ PATH, которую я не предлагаю):
sudo ln -s <path/to/yourscript.py> /usr/bin/run

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

run <command-with-desired-output-format>
0
ответ дан 22 November 2019 в 22:55

С apt-get -qq install -y ПАКЕТ 2> / dev / null вы можете:

  1. Показать только ошибки с помощью -qq .
  2. Отправить ошибки на / dev / null (не показано), чтобы вы могли установить пакет с нулевым выводом.
1
ответ дан 5 January 2021 в 23:28

Для меня это отлично работает для полностью бесшумного / нулевого выхода при установке причина NULL STDIN и STDOUT.

DEBIAN_FRONTEND=noninteractive apt-get install -qq [packagename] < /dev/null > /dev/null

Надеюсь, это поможет !!

0
ответ дан 2 April 2021 в 01:17

Другие вопросы по тегам:

Похожие вопросы: