apt-get mass install paketleri bir dosyadan mı?


36

Çok sayıda paket ismini içeren bir metin dosyasına sahibim.

package1
package2

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

package 4

Yorumları kaldırmadan, metin paketindeki tüm paketleri toplu olarak nasıl yükleyebilirim?


Bu çözüm, yorumları kullanmanıza izin verir: monolune.com/installing-apt-packages-from-a-requirements-file
Flux

Yanıtlar:


44

Bu satırlar boyunca bir şeyler hile yapmak gerekir.

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

$ (Bir şey) yapısı , çıktısını komut satırına ekleyerek bir şey komutunu çalıştırır .

Grep komutu, isteğe bağlı olarak önce boşluk bırakılmasına izin veren # ile başlayan herhangi bir satırı hariç tutar. Sonra tr komutu yeni satırları boşluklarla değiştirir.


4
trçok baytlı satır sonu dizileriyle başarısız olur (düşünüyorum \r\n), neden kullanmıyorsunuz xargs?
Ivan Anishchuk,

11

Aşağıdaki komut alternatif üzerinde (hafif) bir iyileştirmedir çünkü sudo apt-get installpaket listesi boşken çalıştırılmaz.

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

-aSeçeneğin standart girdi yerine doğrudan dosyadan okuduğunu unutmayın . Bir dosyayı dosyalamak istemeyiz xargsçünkü kullanım için stdin değişmeden kalmalıdır apt-get.


xargsBunu yapmanın doğru yolu. Hile ile <()temiz.
Ivan Anishchuk,

1
Çünkü gerçekten iyi bir çözüm olduğunu xargsmarkaları emin ARG_MAX varılamamıştır.
phk

Olması gerekir xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, " <(" ama " $(" ve -yapt-get seçeneği iyi bir fikir olacaktır.

İşlem değişikliği , okunması awkiçin bir dosya tanımlayıcısının çıktısını yönlendirir xargs -a. Yani kesinlikle istiyor <(ve istemiyorsun $(. Sadece dene ve ne demek istediğimi göreceksin. Eğer komut katılımsız çalışıyorsa ve tam olarak ne kurulacağını biliyorsanız, o zaman kesinlikle -yiyi bir fikirdir.
Altı

4

Bir paket listesi dosyası verildiğinde package.list, şunu deneyin:

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

0

İşte size yeni kurulum için sahip olduğum bir paket listesi kurmak için benim çözümüm:

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

Bir bashfonksiyonda:

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

grep açıklama:

  • -o sadece ifadeyle eşleşen satırın bir kısmını tut
  • ^[^#] ile başlamayan herhangi bir şey #
  • [[:alnum]-]* bir dizi harf, rakam ve -
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.