Bash скрипт из нескольких файлов
Опубликовано:
Возможна ли подгрузка функций в bash скрипт из других файлов?
Допустим, надо сделать один большой скрипт, и хочется использовать именно bash скрипт, потому что он будет работать везде.
Недавно мне надо было собрать xcframework, который использует Сишную библиотеку libopus. Передо мной стояли следующие цели, чтобы:
xcframeworkмог собрать любой разработчик- Была возможность легко добавить новую архитектуру и платформу
- И самое главное, чтобы для сборки нужно было запустить только один скрипт
Задача кажется не сложной, надо:
- Удалить старые данные, подготовить все для сборки
- Скачать и разархивировать исходники
libopus - Собрать
libopusпод разные архитектуры для разных платформiphoneosиiphonesimulator. Это значит, что надо скомпилировать библиотеку 5 раз (3 архитектуры дляiphoneosи 2 дляiphonesimulator); - Объединить все бинарники в две "Fat library", по одной для каждой платформы
- Скопировать бинарники в папку с Xcode проектом, туда же скопировать заголовочные файлы
- Собрать фреймворки использующие Сишную библиотеку для
iphoneиiphonesimulator - Объединить фреймворки в
xcframework - Удалить все файлы, кроме
xcframeworkи открыть папку содержащую его
Не хотелось писать все в одном файле, потому что это было бы тяжело читать и поддерживать. Я выбрал другой подход и выделил каждый шаг в отдельный файл, так же есть один файл build.sh, который подгружает остальные файлы и вызывает функции из них.
Как выделить функцию в отдельный файл?
Все просто, создаете отдельный файл и пишете в нем:
#!/bin/bash
echo_world() {
echo "world"
}Чтобы загрузить эту функцию и выполнить ее, потребуется проверить наличие файла, после чего загрузить его с помощью команды source.
#!/bin/bash
ECHO_WORLD_PATH="./echo-world-source.sh"
if [ ! -f "$ECHO_WORLD_PATH" ]; then
echo "$ECHO_WORLD_PATH not found"
exit 1
fi
source "$ECHO_WORLD_PATH"
# Вызываем функции из файла
echo_worldВы пробовали такой подход? Как вам кажется удобно ли будет так разбивать сложные скрипты?
Разделение логики скрипта на несколько файлов упрощает его чтение и поддержку.