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