bash: Где хранить библиотечные файлы

bash: Где хранить библиотечные файлы

Сообщение nezabudka » 21 окт 2018, 19:19

Бросаем библиотечные файлы где ни попадя или Порядок нужен слабакам, гений властвует над хаосом

В bash подключение библиотеки
происходит следующей командой
. /dir/to/lib или
source /dir/to/lib
То есть надо знать где именно находится библиотека и ввести путь к ней.
Спортивного интереса ради я решила добавить немного беспорядка
и придумала апгрейд своей файлопомойки univertaz/, расширив
ее до пределов домашней директории.
Для начала создаем директорию под базу данных
Код: выделить все
sudo mkdir /usr/ml

Добавим права доступа к директории для пользователя nez.
Ведь нам нужно создать и изменять в дальнейшем базу данных без рутовских привилегий.
Код: выделить все
sudo sedfacl "u:nez:rwx" /usr/ml

В файле .bashrc пишем функцию берущyю на себя всю рутину по обработке
действий связанных с созданием, подключением или обновлением базы.
Код: выделить все
include() {
        if [ $1 ]; then
                if file=$(locate -d /usr/ml/mlocate.db -qer /$1$ -n 1) ; then
                        source $file
                else
                        updatedb -l 0 -o /usr/ml/mlocate.db -U $HOME
                        if file=$(locate -d /usr/ml/mlocate.db -qer /$1$ -n 1) ; then
            source $file
         fi
                fi
        else
                updatedb -l 0 -o /usr/ml/mlocate.db -U $HOME
        fi
}
typeset -x -f include

Последней строчкой экспортируем функцию чтобы она была доступна из скриптов.
Перечитаем bashrc или перелогинемся.
В самом скрипте библиотека подключается к программе привычной многим строчкой
include libhello
Создадим тестовую библиотеку и поместим ее в любое место в директории $HOME
cat libhello
Код: выделить все
hello() {
   echo hi from libhello
}

Во время первого использования функция include создаст базу
проиндексирует все файлы и имя библиотеки, а во "фронтенде" определит ее абсалютный путь и
подключит к скрипту. Зайдем в любую директорию, отличную от той где находится
библиотека и напишем тестовую программу cat test.sh
Код: выделить все
#!/bin/bash
include libhello
hello

Запустим и получим строчку практически без задержки
>>hi from libhello
Значит база создалась, все файлы дерева из корня $HOME
проиндексированы. Полный путь к библиотеке найден и она
успешно подключилась к запущенному скрипту о чем свидетельствует
работа функции hello
Базу так же легко обновить в командной строке набрав в терминале
include
Что впрочем совсем необязательно, база сама будет при необходимости
обновляться если не будет найдена соответствующая библиотека.
Работа утилиты locate построена так что по времени поиска в большинстве
случаев вполне допустимо по времени выполнения использовать все поддерево
$HOME файловой системы. Но ничто не мешает при необходимости сузить это
пространство.
Храните библиотечные файлы практически в любом удобном месте при условии соблюдения
уникальности их имен. Главное теперь помнить имена всех созданных вами библиотек
разбросанных по всему домашнему пространству))) или же придумать какое нибудь хитрое расширение
для своих библиотечных файлов.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 7 месяцев 22 дня
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

bash: Где хранить библиотечные файлы

Спонсор

Спонсор
 

Re: bash: Где хранить библиотечные файлы

Сообщение ALEXX » 22 окт 2018, 07:55

nezabudka - С возвращением! Мы рады тебя видеть ;) :good: :good: :good:
Аватар пользователя
ALEXX
Администратор
Администратор
 
Сообщений: 1158
Фото: 35
Стаж: 3 года 11 месяцев 20 дней
Откуда: Королёв
Благодарил (а): 339 раз.
Поблагодарили: 187 раз.


Вернуться в Bash

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1