apt-get แพ็คเกจการติดตั้งจำนวนมากจากไฟล์?


36

ฉันมีไฟล์ข้อความที่มีชื่อแพคเกจมากมาย

package1
package2

# comment
# installing package3 because it was needed for...
package 3

package 4

ฉันจะติดตั้งแพคเกจทั้งหมดภายในไฟล์ข้อความโดยไม่ต้องลบความคิดเห็นได้อย่างไร


โซลูชันนี้ช่วยให้คุณสามารถใช้ความคิดเห็น: monolune.com/installing-apt-packages-from-a-requirements-file
Flux

คำตอบ:


44

บางสิ่งบางอย่างตามสายเหล่านี้ควรทำเคล็ดลับ

apt-get install $(grep -vE "^\s*#" filename  | tr "\n" " ")

การก่อสร้าง $ (บางอย่าง) เรียกใช้คำสั่งsomethingใส่เอาต์พุตลงในบรรทัดคำสั่ง

คำสั่ง grep จะไม่รวมบรรทัดใด ๆ ที่ขึ้นต้นด้วย # อนุญาตให้เว้นวรรคก่อนหน้าก็ได้ จากนั้นคำสั่ง tr จะแทนที่บรรทัดใหม่ด้วยช่องว่าง


4
trจะล้มเหลวด้วยลำดับหลายบรรทัดสุดท้าย (คิด\r\n) ทำไมคุณไม่ใช้xargs?
Ivan Anishchuk

11

คำสั่งต่อไปนี้เป็นการปรับปรุง (เล็กน้อย) เหนือทางเลือกเนื่องจากsudo apt-get installจะไม่ถูกดำเนินการเมื่อรายการแพ็กเกจว่างเปล่า

xargs -a <(awk '! /^ *(#|$)/' "$packagelist") -r -- sudo apt-get install

โปรดทราบว่า-aตัวเลือกจะอ่านรายการโดยตรงจากไฟล์แทนที่จะเป็นอินพุตมาตรฐาน เราไม่ต้องการที่จะท่อไฟล์เป็นxargsเพราะ stdin apt-getต้องยังคงไม่เปลี่ยนแปลงสำหรับการใช้งานโดย


xargsเป็นวิธีที่เหมาะสมในการทำเช่นนี้ เคล็ดลับ<()คือเรียบร้อย
Ivan Anishchuk

1
นั่นย่อมเป็นทางออกที่ดีกว่าเพราะxargsทำให้แน่ใจARG_MAX ไม่ถึง
phk

มันจะต้องxargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y installไม่ใช่ " <(" แต่ " $(" และตัวเลือก-yสำหรับ apt-get จะเป็นความคิดที่ดี

การทดแทนกระบวนการเปลี่ยนเส้นทางเอาต์พุตของawkไปเป็น file descriptor เพื่อxargs -aให้อ่าน ดังนั้นคุณต้องการ<(และไม่$(แน่นอน ลองแล้วคุณจะเห็นสิ่งที่ฉันหมายถึง หากคำสั่งทำงานแบบอัตโนมัติและคุณรู้อยู่แล้วว่ากำลังจะติดตั้งอะไรแน่นอนว่าคำสั่งนั้นเป็น-yความคิดที่ดี
หก


0

นี่คือทางออกของฉันในการติดตั้งรายการแพคเกจที่ฉันมีสำหรับการติดตั้งใหม่:

sudo apt install -y $(grep -o ^[^#][[:alnum:]-]* "filename")

ในbashฟังก์ชั่น:

aptif () {
    sudo apt install -y $(grep -o ^[^#][[:alnum:]-]* "$1")
}

grep คำอธิบาย:

  • -o เก็บเฉพาะบางส่วนของบรรทัดที่ตรงกับนิพจน์
  • ^[^#] สิ่งที่ไม่ได้เริ่มต้นด้วย #
  • [[:alnum]-]* ลำดับของตัวอักษรตัวเลขและ -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.