Подтвердить что ты не робот

Как включить файл в оболочку bash script

Есть ли способ включить другую оболочку script в оболочку script, чтобы иметь возможность доступа к ее функциям?

Как и в PHP, вы можете использовать директиву include с другими файлами PHP, чтобы запускать функции, которые содержатся внутри, просто вызывая имя функции.

4b9b3361

Ответ 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)