В настоящее время я делаю это, используя файл функций, включающий все мои функции в нескольких скриптах, которые его используют:
source ./functions.sh
Один из недостатков, который я заметил, заключается в том, что номер строки, которую bash выводит при синтаксических ошибках, больше не совпадает с номером строки в исходном скрипте.
решение1
То, как вы используете его, разумно.
Я не могу воспроизвести вашу проблему соболочка bashЯ мог бы работать над (GNU bash, версия 4.1.2 и GNU bash, версия 4.3.11). Смотрите ниже:
Тестовый скрипт go.sh
. Вы можете запустить его с помощью ./go.sh
после того, как сделаете его исполняемым, а chmod u+x go.sh
также/bin/bash go.sh
echo " ### Here we start ###" Script line 1
source my_sourced_file
echo Script line 3
casfsda # this is the line 4 of script
echo Script line 5
f "Script line #6 using the function from sourced file"
echo " ### Here we finish ###" Script line 7
Файл с функциями, который необходимо поместить в текущий каталог, называется my_sourced_file
:
echo Hello word this is the 1 line of my_sourced_file
f(){ echo Hello $1 ;}
f "Gustave line number 3 of my_sourced_file"
echo linea 4 my_sourced_file
Выход (вчерныйОшибка)
### Здесь мы начинаем ### Скрипт строка 1
Привет, слово, это первая строка my_sourced_file
Привет, Гюстав, строка номер 3 my_sourced_file
строка 4 my_sourced_file
Скрипт строка 3
./go.sh: строка 4: casfsda: команда не найдена
Строка скрипта 5
Привет, строка скрипта №6, использующая функцию из исходного файла ### Здесь мы заканчиваем ### Строка скрипта 7
- Протестировано на GNU bash версии 4.3.11
- и на старом GNU bash, версии 4.1.2