apt-get mass फ़ाइल से संकुल संस्थापित करें?


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" " ")

$ (कुछ) निर्माण कुछ कमांड चलाता है , कमांड लाइन में अपना आउटपुट डालता है।

Grep कमांड किसी भी लाइन को शुरू करने के लिए बाहर रखेगी # के साथ, वैकल्पिक रूप से इससे पहले व्हॉट्सएप के लिए अनुमति देता है। फिर tr कमांड रिक्त स्थान के साथ नए सिरे की जगह लेती है।


4
trबहु-बाइट एंड-ऑफ़-लाइन दृश्यों (विचार \r\n) के साथ विफल हो जाएगा , आप उपयोग क्यों नहीं करते xargs?
इवान अनिशचुक

11

निम्नलिखित कमांड विकल्प पर एक (मामूली) सुधार है क्योंकि sudo apt-get installजब पैकेज सूची खाली होती है तो उसे निष्पादित नहीं किया जाता है।

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

ध्यान दें कि -aविकल्प मानक इनपुट के बजाय सीधे फ़ाइल से आइटम पढ़ता है। हम फ़ाइल को पाइप में नहीं xargsडालना चाहते क्योंकि स्टड द्वारा उपयोग के लिए अपरिवर्तित रहना चाहिए apt-get


xargsऐसा करने का सही तरीका है। चाल के साथ <()साफ है।
इवान अनिशचुक

1
यह वास्तव में बेहतर समाधान है क्योंकि xargsयह सुनिश्चित करता है कि ARG_MAX पहुँच नहीं है।
phk

यह होना चाहिए xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, "नहीं" <(लेकिन " $(" और -yउपयुक्त के लिए विकल्प एक अच्छा विचार होगा।

प्रक्रिया प्रतिस्थापन से awkफाइल डिस्क्रिप्टर के आउटपुट को रीडायरेक्ट करने के लिए रीडायरेक्ट किया जाता है xargs -a। तो आप निश्चित रूप से चाहते हैं <(और नहीं $(। बस इसे आज़माएँ और आप देखेंगे कि मेरा क्या मतलब है। यदि कमांड अनअटेंडेड चल रही है और आप पहले से ही जानते हैं कि वास्तव में क्या इंस्टॉल होने जा रहा है, तो निश्चित रूप से, वे -yएक अच्छा विचार है।
छह

4

पैकेज सूची फ़ाइल को देखते हुए package.list, प्रयास करें:

sudo apt-get install $(awk '{print $1'} package.list)

0

खैर, मेरे पास नए इंस्टाल के लिए मेरे पास मौजूद पैकेजों की सूची स्थापित करने का मेरा समाधान है:

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

एक bashसमारोह में:

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

grep स्पष्टीकरण:

  • -o लाइन का केवल वही हिस्सा रखें जो एक्सप्रेशन से मेल खाता हो
  • ^[^#] कुछ भी जो एक के साथ शुरू नहीं होता है #
  • [[:alnum]-]* अक्षरों, संख्याओं और का एक क्रम -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.