Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

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

Ответить
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

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

Сообщение nezabudka »

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

В 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
Аватара пользователя
ALEXX
Администратор
Администратор
Сообщения: 1327
Зарегистрирован: 21 дек 2014, 14:59
Откуда: Королёв
Контактная информация:

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

Сообщение ALEXX »

nezabudka - С возвращением! Мы рады тебя видеть ;) :good: :good: :good:
Ответить

Вернуться в «Bash»