Как включить функции из сценария оболочки из другой папки

#shell #directory-structure

#оболочка #структура каталогов

Вопрос:

У меня есть структура каталогов типа

 |--bringup-scripts
|  |--prep.sh
|--scripts
|  |--i2c0.func
|  |--bit.func
 

The prep.sh выглядит примерно так :

 #!/bin/bash

. ../scripts/i2c0.func

 

i2c0.func выглядит следующим образом :

 #!/bin/sh

. ./bit.func

 

Поскольку существует зависимость i2c0.func от bit.функция, если я запускаю prep.sh из папки bringup-scripts он выдает сообщение об ошибке со словами

./bit.func: нет такого файла или каталога

Как я должен это решить?

Ответ №1:

Что вы могли бы сделать, так это не использовать относительные пути, вместо этого определяя начальную точку для всех сценариев в prep.sh файл, подобный этому:

 #!/bin/bash

export ROOT_DIR="$(dirname $PWD)"

. $ROOT_DIR/scripts/i2c0.func
 

Вы также должны включать $ROOT_DIR в качестве префикса для каждого сценария в каталоге scripts, например:

i2c0.func

 #!/bin/sh

. $ROOT_DIR/scripts/bit.func
 

Ответ №2:

Я не знаю, есть ли стандартный способ сделать это, но вы могли бы попробовать изменить i2c0.func следующим образом:

 #!/bin/sh

. ../scripts/bit.func
 

Хотя обратите внимание prep.sh получает рабочий каталог вызывающего объекта, поэтому он будет работать только тогда, когда вы запустите его из bringup-scripts/ или scripts/ .

Комментарии:

1. Спасибо, но в папке scripts также есть файлы, которые используют файл i2c0.func, это было бы не очень эффективно для них

2. @YashGupta Как нет?

3. Я не уверен в эффективности производительности, но хотел бы иметь что-то более универсальное, поскольку у меня много похожих зависимостей