Как включить файл в оболочку bash script
Есть ли способ включить другую оболочку script в оболочку script, чтобы иметь возможность доступа к ее функциям?
Как и в PHP, вы можете использовать директиву include
с другими файлами PHP, чтобы запускать функции, которые содержатся внутри, просто вызывая имя функции.
Ответы
Ответ 1
Просто введите script:
source FILE
или
. FILE
это то же самое.
$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Ответ 2
Вышеуказанные ответы верны, но если запустить скрипт в другой папке, возникнут некоторые проблемы.
Например, a.sh
и b.sh
находятся в одной папке,
a включить b с . ./b.sh
, чтобы включить.
При запуске сценария из папки, например, с помощью xx/xx/xx/a.sh
, файл b.sh
не будет найден: ./b.sh: No such file or directory
.
Я использую
. $(dirname "$0")/b.sh
Ответ 3
Да, используйте источник или короткую форму, которая просто .
:
. other_script.sh
Ответ 4
В моей ситуации, чтобы включить color.sh
из того же каталога в init.sh
, мне пришлось сделать что-то следующее.
. ./color.sh
Не уверен, почему ./
, а не color.sh
напрямую. Содержание color.sh
выглядит следующим образом.
RED='tput setaf 1'
GREEN='tput setaf 2'
BLUE='tput setaf 4'
BOLD='tput bold'
RESET='tput sgr0'
Использование File color.sh
не является ошибкой, но цвет не отображается. Я проверил это в Ubuntu 18.04
и версия Bash
:
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)