При условии, что в именах библиотек нет проблемных символов (например, в IFS
), переберите список и передайте каждый новый поиск:
./libopt -d test . 2>&1 | sed -rn 's/Cannot find library \"(.*?)\"/\1/p' \
| while read libname; do
find /usr -name "$libname"
done
В противном случае, для одного прохода файловой системы (в приведенном выше примере выполняется по одному для каждого входного файла), параметр find -name
не подходит для сопоставления списка имен файлов, поэтому, возможно, результат поиска отдельной файловой системы может быть передан в grep
. Поиск также можно сузить, просматривая только каталоги в / usr
с именем lib
:
./libopt -d test . 2>&1 | sed -rn 's/Cannot find library \"(.*?)\"/\1/p' > blah
find /usr/lib /usr/*/lib -type f | grep -F -f blah
Используйте сгенерированное имя файла mktemp
, если бла
- проблема. С помощью причудливой оболочки файл шаблонов для grep
может быть сгенерирован «на лету» с помощью некоторой формы подстановки процессов.
Спасибо, что указали мне на другую связанную тему .
Для меня ключевым было использование переменной BASH _ENV.
Как отмечено в справочном руководстве по bash, существует несколько способов открыть оболочку , один из которых вызывал у меня затруднения, когда он вызывался «не -интерактивно».
Чтобы обойти тот факт, что не -интерактивная оболочка не запускает ни /etc/profile
, ни /etc/bashrc
, я создал специальный сценарий оболочки в /etc/profile.d/
, например. «пользовательский _shopts.sh» только с параметрами shopt, которые я хотел бы иметь для каждой сессии, и в этом же скрипте я экспортирую переменнуюBASH_ENV=/etc/profile.d/custom_shopts.sh
Таким образом, в любой оболочке, которую я запускаю (оболочка входа в систему, интерактивная оболочка или не -интерактивная оболочка, но за исключением bash --posix
), сценарий оболочки /etc/profile.d/custom_shopt.sh
запускается и устанавливает параметры магазина. Я ожидаю.