ฉันจะทำให้ 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 ฉันทำงานนี้ในเหล่านี้บนทั้งที่เทรวิส-CI แต่คำตอบนั้นใช้ได้ดี
jbtule

"การเลือกแพคเกจที่ไม่ได้เลือกไว้ก่อนหน้านี้" นั้นหมายถึงว่าตัวจัดการแพ็กเกจนั้นรวมถึงแพ็คเกจที่จำเป็นสำหรับการพึ่งพา ดังที่ฉันได้เขียนไว้ก่อนหน้านี้คุณอาจต้องการรายงานข้อผิดพลาดเกี่ยวกับ--quietตัวเลือกที่ปรากฏว่าทำงานไม่ถูกต้อง
Paddy Landau

ฉันไม่มีความสุขที่จะรายงานอาการเดียวกันนั้นใน Ubuntu 15.04 20150709
Lloyd Dewolf

ลักษณะเช่นนี้เกี่ยวข้องกับ 2009 รายงานปัญหา dpkg: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617
Lloyd Dewolf

คำตอบ:


83

man page สำหรับ 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(ไม่มีเอาต์พุตยกเว้นข้อผิดพลาด) กรุณาโหวต!
Charney Kaye

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และรูปแบบอื่น ๆ ที่เกี่ยวข้องกับคิวมากยิ่งขึ้นของ ( แต่ผมไม่เห็นเอกสารใด ๆ ที่บ่งชี้ว่านี่จะทำงาน. ฉันทำงานเดเจสซีใน google เมฆครับ (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/…
Stefan Lasiewski

3
ใน Docker คุณมีทางเลือก 2 ทาง: (1) รันคำสั่งแต่ละคำสั่งแยกกันแทนที่จะ&&เข้าร่วมกับพวกมัน (อาจใช้ได้ แต่ไม่ใช่ "วิธีเทียบท่า") (2) เปลี่ยนเส้นทางเอาต์พุตไปยัง / dev / null เหมือนในคำตอบอื่น ๆ ตัวเลือกที่ 2 น่าจะเป็นทางออกที่ดีที่สุดของคุณในขณะที่มีข้อบกพร่องนี้
Mike

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เป็นนัยตามที่ WulfHart พูดและ--force-yesทำให้เกิดการไถลผ่านอะไรก็ได้
JamesTheAwesomeDude

2
@Vorac ไม่ได้เป็นเพียงการเปลี่ยนเส้นทางstdout(ดูข้อผิดพลาดเป็นสิ่งที่ต้องการ IMO)
Oli

3
นี่ไม่ใช่คำตอบสำหรับคำถาม มันเป็นวิธีแก้ปัญหา
Charney Kaye

42

เราประสบปัญหาเดียวกัน apt-get install -qqเอาออกส่วนใหญ่ แต่น่ารำคาญ "(อ่านฐานข้อมูล ... " ยังคงมีอยู่

เรามาดูในแหล่งที่มาของ apt และค้นพบว่า output นั้นถูกสร้างโดย dpkg ที่ถูก fork โดย apt จากนั้นแหล่งที่มาของ dpkg จะแสดงว่า soutput ที่น่ารำคาญนั้นจะออกเมื่อ isatty (1) เป็นจริงเท่านั้น นี่เป็นกรณีเดียวเมื่อ fork ใช้ pty แทนไปป์ กลับไปที่ 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
Amedee Van Gasse

1
ยังคงมีพวงของการเลือก / การเตรียม / การตั้งค่าเส้น ...
hayd

1
การ-o=Dpkg::Use-Pty=0ทำงานที่สมบูรณ์แบบบน Ubuntu 18.04 มันแสดงเพียงหนึ่ง "ฐานข้อมูลการอ่าน" แทนที่จะเป็นหลายฐานข้อมูลที่มีการอัพเดตความคืบหน้าทุก ๆ 5%
wisbucky

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.