Linux Redhat 7: Как установить глобальную / общесистемную опцию оболочки?

При условии, что в именах библиотек нет проблемных символов (например, в 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 может быть сгенерирован «на лету» с помощью некоторой формы подстановки процессов.

4
15.04.2019, 11:20
1 ответ

Спасибо, что указали мне на другую связанную тему .

Для меня ключевым было использование переменной 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запускается и устанавливает параметры магазина. Я ожидаю.

1
27.01.2020, 21:01

Теги

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