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

Существует Диаметр.. Совсем не столько же функций сколько Visio, но делает схемы: http://live.gnome.org/Dia

5
02.05.2017, 01:56
3 ответа

Можно использовать xargs:

 cat /path/to/file | xargs apt-mark auto

Это должно работать, если существует одно имя пакета на строку в текстовом файле /path/to/file.

Другая опция состояла бы в том, чтобы использовать для цикла:

 for pkg in `cat /path/to/file`; do apt-mark auto $pkg; done

Второй путь мог бы быть полезным, если у Вас есть подобная проблема, где команду нельзя назвать со списком параметров, но необходимо назвать его однажды для каждого параметра, который Вы имеете. Но в Вашем случае дело не в этом изящный, конечно, … :)

Btw я предполагаю, что Вы используете удар.

Примечание: В моей системе apt-mark --help говорит:

Usage: apt-mark [options] {markauto|unmarkauto} packages...

И также:

apt-mark is deprecated, use apt-get markauto/unmarkauto.
7
27.01.2020, 20:34
  • 1
    С xargs, можно просто записать </path/to/file xargs apt-mark auto; и это справится с любым пробельным разделением между именами пакета, не обязательно новыми строками (xargs имеет проблемы заключения в кавычки, но имена пакета Debian не содержат проблематичного символа, таким образом, он в порядке здесь). Еще более простой метод apt-mark auto $(cat /path/to/file) (который, снова, работает, не требуя никакой специальной предосторожности, потому что имена пакета не содержат специальные символы). –  Gilles 'SO- stop being evil' 13.07.2011, 00:06

Это кажется, что Вы хотите вывести свой список файлов в apt-mark auto по одному. Этот псевдокод должен запустить Вас:

while read pkgname; do apt-mark auto $pkgname; done <list_of_packages
3
27.01.2020, 20:34
  • 1
    Почему Вы называющий этот псевдокод? Это действительно работает. –  tshepang 12.07.2011, 20:27
  • 2
    Правда, это делает. Нет только никакой проверки исправности, сообщения об ошибке, и т.д.... –  pboin 12.07.2011, 20:52

Запустите следующий скрипт с python scriptname.py list-of-packages.txt как корень:

import subprocess
import sys

filename = sys.argv[1]
with open(filename) as f:
    packages = f.read()
    packages = packages.split()
    packages = " ".join(packages)
    cmd = "apt-mark auto " + packages
    subprocess.call(cmd, shell=True)

Я ожидаю, что это не было бы проблемой начиная с наличия GNOME, подразумевает, что Вам уже установили Python.

1
27.01.2020, 20:34
  • 1
    Вы только что переосмыслили xargs минус его проблемы заключения в кавычки, но они не проблема здесь. –  Gilles 'SO- stop being evil' 13.07.2011, 00:07
  • 2
    я был уверен, был лучшим способом сделать вещи. Это именно так происходит, я был первым для ответа, таким образом, я думал, что что-то субоптимальное является лучше чем ничего :) –  tshepang 13.07.2011, 01:00

Теги

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