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
ফ্লাক্স

উত্তর:


44

এই লাইন বরাবর কিছু কৌশল করা উচিত।

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

কমান্ড লাইনে এর আউটপুট সন্নিবেশ করে $ (কিছু) নির্মাণ কিছু কমান্ড চালায় ।

গ্রেপ কমান্ড একটি # দিয়ে শুরু হওয়া কোনও লাইন বাদ দেবে, allyচ্ছিকভাবে এর আগে শ্বেত স্পেসের অনুমতি দেয়। তারপরে টিআর কমান্ড স্পেস সহ নতুন লাইনের পরিবর্তে।


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 এটি পৌঁছেছে না।
পিএইচকে

এটি হতে হবে 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]-]* অক্ষর, সংখ্যা এবং -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.