Как получить имя пакета в хуках apt?

Со встроенными модулями Bash:

Это немного некрасиво, так как нам нужно разделить 5, чтобы избежать запятой в конце:

$ printf '%s,' {1..4}; echo 5
1,2,3,4,5

Хотя, поскольку printfможет выводить данные непосредственно в переменную, это можно обойти и удалить последнюю запятую с помощью расширения параметра:

$ printf -v tmpvar "%s," {1..5}; echo "${tmpvar%,}"
1,2,3,4,5

Или с "$*", которое соединяется с использованием первого символа IFS. Это уничтожает глобальное состояние, но этого можно легко избежать, запустив его в подоболочке или в функции сlocal IFS:

$ IFS=,; set -- {1..5}; echo "$*";
1,2,3,4,5

Если ограничения указаны в переменных, вероятно, проще всего сделать это вручную с помощью цикла, поскольку вы не можете использовать переменные в качестве конечных точек в диапазоне раскрытия фигурных скобок. Опять же, верхний предел находится в частном случае:

a=1; b=5
for (( i=a ; i<b ; i++ )); do
    printf "$i,";
done;
printf "$b\n" 
1
06.12.2020, 22:26
1 ответ

DPkg::Pre-Invoke— очень общий хук, не привязанный к конкретным операциям с пакетами; в результате он не дает возможности получить список пакетов, с которыми выполняется операция.

Чтобы получить список установленных пакетов, используйте DPkg::Pre-Install-Pkg. На справочной странице aptесть некоторая документация , но вам, вероятно, придется поэкспериментировать. Команды, запускаемые этим хуком, по умолчанию получают список пакетов на свой стандартный ввод с различными уровнями детализации в зависимости от используемого протокола. Обратите внимание, что этот хук также вызывается при удалении пакетов, поэтому ваш обработчик должен будет проверить действие, соответствующее каждому пакету.

Установка протокола не очевидна из документации; в DPkg::Tools::options::cmd::Versionзамените cmdсвоей командой. См., например, apt-listbugs, который добавляет

DPkg::Tools::Options::/usr/sbin/apt-listbugs::Version "3";

для указания версии 3 протокола.

Муру написал исчерпывающий пример на AskUbuntu , который должен прояснить ситуацию.

1
18.03.2021, 22:44

Теги

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