วิธีการติดตั้งแพ็คเกจด้วย apt โดยไม่ต้องมีข้อความ“ คุณต้องการทำต่อไป [Y / n]?”


52

แน่นอนเมื่อคุณพิมพ์:

sudo apt-get install whatever

มันถามคุณ:

Do you want to continue [Y/n]? 

มีวิธีใดบ้างที่ฉันสามารถติดตั้งได้โดยไม่ถามฉันว่าต้องการดำเนินการต่อหรือไม่ ฉันไม่แคร์เรื่องอวกาศฉันมีมากพอแล้ว


คำตอบ:


86
sudo apt-get install -y whatever

จากหน้าคน ( man apt-get):

 -y, --yes, --assume-yes

           Automatic yes to prompts; assume "yes" as answer to all prompts and
           run non-interactively. If an undesirable situation, such as
           changing a held package, trying to install a unauthenticated
           package or removing an essential package occurs then apt-get will
           abort. Configuration Item: APT::Get::Assume-Yes.

9
(วิธีการอยู่อย่างเป็นอันตรายไฟล์)
2413

ขอบคุณมาก! ฉันควรใช้ man page นั้นบ่อยขึ้น :)
ลุค

2
นั่นคือเหตุผลที่พวกเขาอยู่ที่นั่น @ KingShimkus;)
Rinzwind

5
sudo apt-get install -yeah อะไรก็ตาม ...
BoJack Horseman

ทีนี้ถ้ามันใช้งานได้กับการอัพเกรดแพ็คเกจ Docker> <ถ้าคุณไม่เคยอัพเกรด Docker มาก่อนนี่เป็นภาพของสิ่งที่ปรากฏขึ้นในเครื่องแม้ว่าคุณจะใช้--yes: Imgurมันน่ารำคาญเป็นพิเศษ .
Spencer D

15

สำหรับ apt-get -yหรือ--assume-yesทำงานได้ดี (ตาม @rinzwind อธิบาย) และฉันคิดว่านั่นเป็นคำตอบที่ดีที่สุดที่นี่ สำหรับการดำเนินการดูแลระบบแบบโต้ตอบจำนวนมากมีคำสั่งที่คล้ายกัน

อีกวิธีทั่วไปที่น่าสนใจในการทำเช่นนี้คือ:

 $ echo "y" | sudo apt-get install edamame_biscuit

(ในกรณีที่ edamame-biscuit เป็นแพ็คเกจ (ทำขึ้น) ที่คุณต้องการติดตั้งและ "y" ถือว่าเป็นการตอบสนองที่ถูกต้องตามกฎหมายแทนที่ด้วย "ใช่" หรือข้อความอื่น ๆ ตามต้องการ)

'คุณสมบัติ' ของวิธีนี้คือสิ่งนี้จะพังถ้าคุณถือว่าสมมติว่ามีการโต้ตอบเพียงครั้งเดียวไม่ถูกต้อง หากมีพรอมต์ที่อาจไม่เป็นที่ต้องการมากขึ้นคุณอาจไม่ต้องการบอกว่าใช่คุณหลีกเลี่ยงสถานการณ์ที่มีการหมุนวนของระบบโดยไม่ต้องถาม


13
นอกจากนี้, yes | sudo apt-get install edamame-biscuit. ใช่เป็นคำสั่งที่ส่งคำว่า "ใช่" ไปยังเอาต์พุต นอกจากนี้คุณยังสามารถทำให้มันเป็นข้อความอื่น ๆ ตามที่ต้องการดู manpage
Kroltan

14
@Kroltan yesคำสั่ง (โดยค่าเริ่มต้น) เพียงแค่ส่งออกจดหมายyตามด้วยการขึ้นบรรทัดใหม่หลาย ๆ ครั้งตามที่จำเป็นในการเติมบัฟเฟอร์ท่อ ที่จริงการพิมพ์คำว่าคุณจะต้องใช้คำสั่งyes yes yes
Jonathan Callen

3
yesให้อภัยความผิดพลาดของฉัน
Kroltan

4
@Braiam ฉันคิดว่านั่นเป็นประเด็นดังนั้นจึงไม่ได้ทำอะไรเลยถ้ามีคนวางมันลงในเปลือกหอยของเขา
Kroltan

2
ฉันชอบส่วน "คุณสมบัติ" ของวิธีนี้โดยเฉพาะอย่างยิ่งคือสิ่งนี้จะแตกถ้าคุณสมมติว่ามีการโต้ตอบเพียงครั้งเดียวอย่างไม่ถูกต้อง " การส่งสแปมเป็นใช่สำหรับทุกสิ่งอาจเป็นอันตรายอย่างยิ่ง
BeowulfNode42

4

ก่อนอื่นให้เข้าใจว่าทำไมข้อความถึงปรากฏขึ้น อันที่จริง, ถ้าแพ็คเกจไม่มีการพึ่งพาที่คุณยังไม่ได้ติดตั้งหรือคุณบอกให้ติดตั้งอย่างชัดเจน, apt ไม่เคยถามคุณ:

➜  ~  sudo apt-get -qq install xfce4-screenshooter
Selecting previously unselected package xfce4-screenshooter.
(Reading database ... 296146 files and directories currently installed.)
Preparing to unpack .../xfce4-screenshooter_1.8.1-2_amd64.deb ...
Unpacking xfce4-screenshooter (1.8.1-2) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Processing triggers for gnome-menus (3.13.3-1) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for mime-support (3.56) ...
Setting up xfce4-screenshooter (1.8.1-2) ...

ในขณะที่ถ้าคุณต้องการติดตั้งแพคเกจที่ขึ้นอยู่กับแพ็คเกจที่คุณไม่ได้พูดถึงมันจะถามว่า:

➜  ~  sudo apt-get -q install avis
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libjzlib-java libmina-java libslf4j-java
Suggested packages:
  libmina-java-doc libspring-beans-java libcommons-logging-java
  liblog4j1.2-java
The following NEW packages will be installed:
  avis libjzlib-java libmina-java libslf4j-java
0 upgraded, 4 newly installed, 0 to remove and 14 not upgraded.
Need to get 720 kB of archives.
After this operation, 1,258 kB of additional disk space will be used.
Do you want to continue? [Y/n] 

แม้ว่าจะเป็นเช่นนั้นจะไม่ถามว่าคุณบอกด้วยหรือไม่ว่าคุณต้องการติดตั้งแพ็คเกจเหล่านั้น:

➜  ~  apt-get -q install avis libjzlib-java libmina-java libslf4j-java
Reading package lists...
Building dependency tree...
Reading state information...
Suggested packages:
  libmina-java-doc libspring-beans-java libcommons-logging-java
  liblog4j1.2-java
The following NEW packages will be installed:
  avis libjzlib-java libmina-java libslf4j-java
0 upgraded, 4 newly installed, 0 to remove and 14 not upgraded.
Inst libjzlib-java (1.1.3-1 Debian:testing [all])
Inst libslf4j-java (1.7.7-1 Debian:testing [all])
Inst libmina-java (1.1.7.dfsg-11 Debian:testing [all])
Inst avis (1.2.2-2 Debian:testing [all])
Conf libjzlib-java (1.1.3-1 Debian:testing [all])
Conf libslf4j-java (1.7.7-1 Debian:testing [all])
Conf libmina-java (1.1.7.dfsg-11 Debian:testing [all])
Conf avis (1.2.2-2 Debian:testing [all])

แต่ถ้าอย่างนั้นจะทำให้มันไม่ได้ถามคุณอย่างแน่นอนได้อย่างไร ด้วยคำตอบ Rizwind ควรครอบคลุมโซลูชัน Ad-hoc และการเขียนสคริปต์ (อันที่จริงแล้วตัวเลือกนั้นมีการใช้งานมากขึ้นในสคริปต์) คุณสามารถแก้ไขapt.confไฟล์และเพิ่ม:

APT::Get::Assume-Yes

สิ่งนี้ควรจะเพียงพอ:

echo 'APT::Get::Assume-Yes;' | sudo tee -a /etc/apt/apt.conf.d/00Do-not-ask

หมายเหตุสิ่งนี้จะไม่อนุญาตให้มีข้อความแจ้งร้ายอื่น ๆ อีกมากมายที่คุณควรตรวจสอบเช่น:

➜  ~  sudo apt-get install sonar
WARNING: The following packages cannot be authenticated!
  sonar
Install these packages without verification? [y/N] 

นี่คือเหตุผลที่ฉันไม่แนะนำให้ใช้yes | ...เนื่องจากคำเตือนนี้จะถูกละเว้น


สำหรับ "คำเตือน: แพคเกจต่อไปนี้ไม่สามารถรับรองความถูกต้อง!" สิ่งที่ควรทำเกี่ยวกับมัน ฉันได้รับสิ่งนี้สำหรับภาพนักเทียบท่า ( python:3.6-slim) ฉันควรถามคำถามแยกต่างหาก
Martin Thoma

@MartinThoma โดยปกตินั่นเป็นปัญหาเกี่ยวกับรายการแพคเกจที่ไม่อัปเดต เรียกใช้ apt-get update ก่อนทำการติดตั้ง หากยังไม่ได้ลบข้อความให้ถามคำถามโดยให้รายละเอียดมากที่สุดเท่าที่จะทำได้จนถึงวิธีสร้างภาพนักเทียบท่า
Braiam

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