Solaris: PKG - Script To Verify All Packages Except for a Few

Если программа динамически связана, вы можете переопределить функцию открытия файла, предварительно загрузив библиотека. См. Перенаправление файлового дескриптора перед выполнением для примера кода; замените / dev / null на / dev / urandom и установите PATH_TO_OVERRIDE = / dev / random в команде сборки.

5
05.05.2015, 23:38
1 ответ

В Solaris 11.3 вы захотите использовать nawk вместо awk . nawk («новый awk ») устанавливается по умолчанию и должен находиться в вашем пути ( / usr / bin / nawk ).

Функция system () в awk (любая реализация) возвращает не вывод команды, а ее код выхода. Это нормально, поскольку вы, вероятно, в любом случае не хотите получать фактический вывод из pkg . Команда pkg завершится с ненулевым кодом выхода, если что-то пошло не так (см. Руководство pkg ).

Следующий конвейер примет вывод pkg list и пропустит первую строку (которая является заголовком) и все строки, соответствующие именам исключенных пакетов. Для остальных строк ввода он выполнит pkg verify - system () с именем пакета.

Если pkg verify возвращает ненулевой статус выхода, счетчик увеличивается. По окончании обработки отобразится счетчик, показывающий, сколько ошибок проверки произошло.

pkg list | nawk 'NR > 1 && !/exclude1|exclude2/ { if (system("pkg verify " $1)) { e++ } } END { printf("%d errors\n", e) }'

Однако это довольно неэффективно. Быстрее получить список пакетов и проверить их за один раз:

pkg list | nawk 'NR > 1 && !/exclude1|exclude2/ { print $1 }' | ( xargs pkg verify ) || echo "there were errors"

Если у вас есть список пакетов, которые нужно игнорировать в файле:

pkg list | /usr/xpg4/bin/grep -F -v -f excluded.txt | nawk 'NR > 1 { print }' | ( xargs pkg verify ) || echo "there were errors"
2
27.01.2020, 20:42

Теги

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