apt-get массовые пакеты установки из файла?

У меня есть текстовый файл с большим количеством имен пакетов.

package1
package2

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

package 4

Как я могу массово установить все пакеты внутри текстового файла без удаления комментариев?

1
задан 8 February 2013 в 19:23

2 ответа

Следующая команда является (небольшим) улучшением по сравнению с альтернативой, потому что sudo apt-get install не выполняется, когда список пакетов пуст.

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

Обратите внимание, что опция -a считывает элементы непосредственно из вместо стандартного ввода. Мы не хотим передавать файл в xargs, потому что stdin должен оставаться неизменным для использования apt-get.

8
ответ дан 25 May 2018 в 01:40
  • 1
    xargs - правильный способ сделать это. Трюк с <() опрятен. – Ivan Anishchuk 17 February 2016 в 20:19
  • 2
    Это действительно лучшее решение, потому что xargs гарантирует, что ARG_MAX не будет достигнуто. – phk 12 June 2016 в 14:45
  • 3
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 4
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 5
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 6
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 7
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 8
    Он должен быть xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, а не «<(». но "$(" и опция -y для apt-get была бы хорошей идеей. – user 11 July 2016 в 23:19
  • 9
    Подстановка процесса перенаправляет вывод awk в дескриптор файла для xargs -a для чтения. Поэтому вы определенно хотите <(, а не $(. Просто попробуйте, и вы поймете, что я имею в виду. Если команда будет запущена без присмотра, и вы уже точно знаете, что будет установлено, то уверены, что флаг -y - хорошая идея. – Six 12 July 2016 в 06:01

Учитывая файл списка пакетов package.list, попробуйте:

sudo apt-get install $(awk '{print $1'} package.list)
1
ответ дан 25 May 2018 в 01:40

Другие вопросы по тегам:

Похожие вопросы: