บังคับให้ได้รับพร้อมท์ใช่ / ไม่ใช่


11

มีวิธีบังคับapt-getให้แสดงพรอมต์ใช่ / ไม่ใช่หรือไม่ มี--force-yesตัวเลือกอยู่แล้ว แต่ดูเหมือนจะไม่มี--force-promptตัวเลือกหรือคล้ายกัน หากคุณพยายามติดตั้งแพคเกจที่มีการติดตั้งทั้งหมดแล้วมันจะเริ่มการติดตั้งโดยไม่แสดงพรอมต์ใช่ / ไม่ สิ่งนี้อาจน่ารำคาญหากคุณต้องการตรวจสอบว่ามีการพึ่งพาหรือไม่และจะติดตั้งรายการใดเนื่องจากคุณไม่ทราบว่ามีการติดตั้งการพึ่งพาที่อาจเกิดขึ้นก่อนหน้าหรือไม่

หมายเหตุ: “ apt-get install” จะขอให้ฉันยืนยันว่าฉันต้องการดำเนินการต่อหรือไม่? ค่อนข้างเกี่ยวข้องกับที่อธิบายภายใต้เงื่อนไขมาตรฐานพรอมต์จะปรากฏขึ้น ฉันสนใจที่จะรู้วิธีการบังคับ


1
"สิ่งนี้อาจน่ารำคาญถ้าคุณต้องการตรวจสอบว่ามีการพึ่งพาหรือไม่และจะติดตั้งตัวใด ฉันสับสนกับสิ่งนี้ หากไม่มีการติดตั้งการพึ่งพาคุณกำลังตรวจสอบอะไร
Faheem Mitha

2
คำถามที่น่าสนใจ ดูเหมือนจะไม่มีทางทำสิ่งนี้ขาดการปะแก้apt-getด้วยตัวเลือกที่เหมาะสม อย่างไรก็ตามตัวเลือกสมมุตินี้ดูเหมือนจะไม่มีประโยชน์กับฉันอย่างแท้จริง
Faheem Mitha

วัตถุประสงค์ @FaheemMitha ของฉันสำหรับการทำเช่นนี้ก็คือว่ามันง่ายมากที่จะหาสิ่งที่อ้างอิงใหม่ได้ / จะได้รับการติดตั้งโดยใช้มากกว่าapt-get install apt-cache showpkg
user369450

คำตอบ:


10

ไม่มีวิธีการใดที่จะทำเช่นนี้กับการใช้งาน apt-get ในปัจจุบันคุณจะต้องเปิดการร้องขอคุณสมบัติและดึงดูดผู้ดูแล พฤติกรรมปัจจุบันของ apt-get คือเมื่อรายการแพ็กเกจที่คุณประกาศติดตั้งโดยปริยายเท่ากับจำนวนแพ็คเกจที่จะติดตั้งและไม่มีแพ็กเกจอื่นที่ได้รับผลกระทบจากการอัพเกรดหรือตัวแบ่งapt-get presum ผู้ใช้แล้ว มั่นใจว่าสิ่งที่จะทำได้ถ้าคุณไม่แน่ใจหรือต้องการที่จะวิเคราะห์สิ่งที่จะทำจริงโดยไม่ต้องติดตั้งแพคเกจที่คุณสามารถใช้คำแนะนำ Costas-s, --simulate, --just-print, --dry-run, --recon, --no-actของ

มีเครื่องมืออื่น ๆ เช่น apt-listbugs ที่จะวิเคราะห์รุ่นของแพ็คเกจที่จะติดตั้งก่อนที่คุณจะติดตั้งมัน (ในกรณีนี้คือบั๊ก) และเตือนคุณ


4

คำสั่งจะถือว่าyesในกรณีของการติดตั้งหนึ่งแพคเกจ (ซึ่งเริ่มต้นจากบรรทัดคำสั่ง) และการพึ่งพาทั้งหมดในระบบอยู่แล้วไม่มีอะไรที่จะติดตั้งยกเว้นหนึ่งแพคเกจถาม

กล่าวอีกนัยหนึ่ง "ถ้าไม่มีอะไรให้ดู (ไม่มีแพ็คเกจเพิ่มเติม) จากนั้นไม่มีพร้อมท์ (ไม่มีอะไรให้ขอ)"

สำหรับจุดประสงค์ในการทดสอบคุณสามารถใช้รหัสได้ -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz หากall dependecies are installedคุณไม่ได้ให้สัญญากับคุณดังนั้นแพ็คเกจอื่น ๆ จะไม่ถูกติดตั้ง
Costas

0

คำถามเก่าฉันเห็น แต่ในสถานการณ์ที่คล้ายคลึงกันในขณะนี้ ฉันมักจะใช้sudo aptitude install -P PACKAGE_NAMEสิ่งที่ถามก่อนติดตั้งเสมอ อย่างไรก็ตามในตัวจัดการแพ็คเกจเริ่มต้นของ Debian คือตอนนี้apt|apt-getและมันไม่มีฟังก์ชั่นนี้ แน่นอนฉันยังคงสามารถติดตั้งaptitudeและใช้งานได้ ... อย่างไรก็ตามฉันได้เขียน sh / bash wrapper function / script ขนาดเล็กสำหรับapt-getถามก่อนการติดตั้ง มันดิบจริงๆและฉันเขียนมันเป็นฟังก์ชั่นในสถานีของฉัน

$ f () { sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf'; read -p 'Do You want to continue (y/N): ' ans; case $ans in [yY] | [yY][eE][sS]) sudo apt-get -y install "$@";; *);; esac; }

ตอนนี้ให้ชัดเจนยิ่งขึ้น:

f () {
  # Do filtered simulation - without lines contains 'Inst' and 'Conf'
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';

  # Interact with user - If You want to proceed and install package(s),
  # simply put 'y' or any other combination of 'yes' answer and tap ENTER.
  # Otherwise the answer will be always not to proceed.
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      # Because we said 'yes' I put -y to proceed with installation
      # without additional question 'yes/no' from apt-get 
      sudo apt-get -y install "$@";
    ;;
    *)
      # For any other answer, we just do nothing. That means we do not install
      # listed packages.
    ;;
  esac
}

ในการใช้ฟังก์ชั่นนี้เป็นสคริปต์ sh / bash เพียงแค่สร้างไฟล์สคริปต์เช่นmy_apt-get.shกับเนื้อหา (หมายเหตุ: รายชื่อไม่มีความคิดเห็นเพื่อให้สั้นลงเล็กน้อย ;-)):

#!/bin/sh

f () {
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      sudo apt-get -y install "$@";
    ;;
    *)

    ;;
  esac
}

f "$@"

แล้วใส่มันสำหรับเช่นในและทำให้มันปฏิบัติการด้วย~/bin/ $ chmod u+x ~/bin/my_apt-get.shหากไดเรกทอรี~/binรวมอยู่ในPATHตัวแปรของคุณคุณจะสามารถดำเนินการได้โดย:

$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL

โปรดทราบ:

  • sudoรหัสไม่ใช้ หากคุณใช้rootบัญชีคุณอาจต้องปรับเปลี่ยน
  • รหัสไม่รองรับการเติมข้อความอัตโนมัติของเปลือก
  • ไม่รู้ว่าโค้ดทำงานอย่างไรกับรูปแบบของเชลล์ (เช่น "!", "*", "?", ... )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.