Bash скрипт из нескольких файлов

Bash скрипт из нескольких файлов

Возможна ли подгрузка функций в bash скрипт из других файлов?

Допустим, надо сделать один большой скрипт, и хочется использовать именно bash скрипт, потому что он будет работать везде.

Недавно мне надо было собрать xcframework, который использует Сишную библиотеку libopus. Передо мной стояли следующие цели, чтобы:

  1. xcframework мог собрать любой разработчик
  2. Была возможность легко добавить новую архитектуру и платформу
  3. И самое главное, чтобы для сборки нужно было запустить только один скрипт

Задача кажется не сложной, надо:

  1. Удалить старые данные, подготовить все для сборки
  2. Скачать и разархивировать исходники libopus
  3. Собрать libopus под разные архитектуры для разных платформ iphoneos и iphonesimulator. Это значит, что надо скомпилировать библиотеку 5 раз (3 архитектуры для iphoneos и 2 для iphonesimulator);
  4. Объединить все бинарники в две "Fat library", по одной для каждой платформы
  5. Скопировать бинарники в папку с Xcode проектом, туда же скопировать заголовочные файлы
  6. Собрать фреймворки использующие Сишную библиотеку для iphone и iphonesimulator
  7. Объединить фреймворки в xcframework
  8. Удалить все файлы, кроме 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

Вы пробовали такой подход? Как вам кажется удобно ли будет так разбивать сложные скрипты?

Разделение логики скрипта на несколько файлов упрощает его чтение и поддержку.

21 декабря 2021 г.