Bagaimana cara membuat pemasangan apt-get tidak terlalu berisik?

128

Jika saya menggunakan apt-get install -qq mono-devel, saya mengharapkannya diam kecuali untuk kesalahan, sesuai dengan bantuan:

-qq No output except for errors

Sebaliknya saya mendapatkan:

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.

dan banyak lagi ...

Bahkan, beberapa ratus baris bernilai output. Ini tampaknya tidak cocok dengan no output except for errors.

Bagaimana saya bisa apt-get installmencetak hanya ketika ada kesalahan sehingga tidak menginstal?

jbtule
sumber
Sudahkah Anda mencoba menggunakan -q = # di mana # adalah level sunyi? (Ada di manual.) Anda mungkin ingin mengajukan laporan bug terhadap ini.
Paddy Landau
@ PaddyLandau memang saya lakukan. Saya tidak tahu mengapa ini berbicara tentang memilih paket yang sebelumnya tidak dipilih baik atau mengapa itu akan menjadi penting, dan saya tidak yakin apakah itu terkait dengan keadaan vms saya menjalankan ini pada ini di salah satu, travis-ci . Tetapi jawabannya bekerja dengan baik.
jbtule
"Memilih paket yang sebelumnya tidak dipilih" berarti bahwa manajer paket termasuk paket yang diperlukan untuk memenuhi dependensi. Seperti yang saya tulis sebelumnya, Anda mungkin ingin mengajukan laporan bug tentang --quietopsi yang tampaknya tidak berfungsi dengan benar.
Paddy Landau
Saya tidak senang melaporkan gejala yang sama di Ubuntu 15.04 20150709.
Lloyd Dewolf
Sepertinya ini terkait dengan laporan masalah dpkg 2009: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf

Jawaban:

83

Halaman manual untuk apt-get adalah sebagai berikut:

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

The -qatau -qqbendera harus pergi sebelum perintah, seperti:

apt-get -qq upgrade

Mike
sumber
3
Ini jawaban yang benar! Implementasi praktis apa pun perlu untuk menjaga petunjuk. Digunakan dengan benar, -qbenar-benar berfungsi (tidak ada output "animasi") dan juga -qq(tidak ada output kecuali kesalahan). Harap menang!
Charney Kaye
27
Tidak, itu tidak berhasil. Bahkan dengan -qqsebelum menginstal perintah saya masih mendapatkan banyak sampah semua dari membaca database hingga membongkar dan mengatur pesan.
CrazyCasta
2
Nah, saya sudah mencoba sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercurialdan variasi lainnya yang melibatkan lebih q ini (meskipun saya tidak melihat dokumentasi yang menunjukkan ini akan bekerja. Aku sedang menjalankan Debian Jessie di google cloud btw (8). Saya juga mencoba Goetz ini menjawab dan tampaknya tidak berfungsi
baik.Oleh karena
3
Ini adalah Ubuntu 16.04.1, berjalan sebagai wadah Docker. Dugaan saya adalah bahwa pesan tersebut sebenarnya berasal dari dpkg, yang dipanggil oleh apt-get. Perintahnya adalah apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Lihat gist.github.com/stefanlasiewski/...
Stefan Lasiewski
3
Di Docker Anda memiliki 2 alternatif: (1) jalankan setiap perintah secara terpisah daripada &&bergabung dengan mereka (mungkin bekerja, tetapi itu bukan "cara buruh pelabuhan") (2) mengarahkan output ke / dev / null seperti di jawaban lainnya. Opsi 2 mungkin merupakan taruhan terbaik Anda saat ada bug ini.
Mike
55

Pengalihan sederhana dapat melakukan ini. Ini tidak persis apa yang ada dalam pikiran Anda, saya yakin, tapi itu pasti berhasil :)

Singkatnya, pukul > /dev/nullsaja perintah apa pun di mana Anda ingin mengarahkan semua stdoutke ketiadaan. Hal-hal yang dihasilkan stderrmasih akan ditampilkan di konsol.

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

Tidak ada sampah! Dan inilah yang terjadi jika kita bodoh dan merusak sesuatu:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$
Oli
sumber
7
Itu sedikit masalah jika Anda mendapatkan prompt ...
l0b0
1
Jika ini merupakan bagian dari skrip, Anda tidak akan meletakkan sudodi depan apt-get. Anda hanya akan sudomenjalankan skrip saja.
Xion
3
@ Oli Jika Anda benar-benar yakin tidak akan membuat sistem Anda terbakar, Anda selalu bisa sudo apt-get upgrade -qq --force-yes > /dev/null. -qqmenyiratkan -y, seperti kata WulfHart, dan --force-yesmembuatnya membajak melalui apa saja.
JamesTheAwesomeDude
2
@Vorac Tidak hanya mengarahkan stdout(melihat kesalahan adalah hal yang diinginkan IMO).
Oli
3
Ini bukan jawaban untuk pertanyaan itu; ini solusinya.
Charney Kaye
42

Kami menghadapi masalah yang sama. apt-get install -qqmenghapus sebagian besar output tetapi menjengkelkan "(Membaca basis data ..." masih tetap ada.

Kami melihat sumber apt dan menemukan bahwa output dihasilkan oleh dpkg yang bercabang oleh apt. Kemudian sumber dpkg menunjukkan bahwa soutput yang mengganggu hanya dikeluarkan ketika isatty (1) benar. Ini hanya terjadi ketika garpu menggunakan pty sebagai pengganti pipa. Kembali ke apt, ada variabel konfigurasi tidak berdokumen yang memungkinkan untuk menggunakan pty pipa yang kemudian memecahkan masalah:

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

Berharap itu bisa membantu orang lain.

Philippe Goetz
sumber
2
Sebenarnya ini jawaban yang benar sepenuhnya. Ini juga memungkinkan untuk menjalankan apt-get dengan single -q dan melihat beberapa output dan tidak melihat "Reading database" yang
mengganggu
1
Saya mencoba ini di gcloud debian jessie (8) dan saya masih bisa membaca baris basis data dan membongkar / mengatur jalur.
CrazyCasta
3
Jawaban ini tidak berfungsi untuk Ubuntu 18.04.
Amedee Van Gasse
1
Masih ada banyak jalur Memilih / Mempersiapkan / Menyiapkan ...
hayd
1
The -o=Dpkg::Use-Pty=0bekerja sempurna pada Ubuntu 18.04. Ini hanya menampilkan satu "Membaca basis data" daripada beberapa yang dengan pembaruan kemajuan setiap 5%.
wisbucky
2

Seperti yang dapat Anda lihat di sini dan di sini
Anda dapat melakukannya:

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

Atau satu baris:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
Menandai
sumber