2012-05-30 4 views
65

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

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

+0

возможно дубликат [Bash: как _best_ включить другие сценарии] (http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -скрипты) – Troubadour

+0

@Troubadour спасибо за ссылку. Несмотря на то, что сообщение ссылается на команду 'source', вопрос сам по себе спрашивает, как определить местоположение файла' source'. – Mechaflash

+0

Да, но это более чем достаточно для ваших нужд. Если бы вы искали «bash» и «include» (два слова в заголовке вашего собственного вопроса), вы бы увидели это в верхней части результатов и не должны были задавать такой основной вопрос. – Troubadour

ответ

128

Проще говоря внутри сценария:

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. 
+12

Обратите внимание, что. совместим с POSIX, тогда как источник не –

+0

Но здесь источник не совсем такой же, как и на языке 'C'. Здесь источник выполняет дочерний скрипт в главном скрипте. Что делать, если я просто хочу вызвать определенную функцию из дочернего скрипта? –

+6

Не путайте '. script.sh' с './script.sh'.Я потерял часы, пытаясь понять, что происходит –

25

Да, используйте source или короткую форму, которая просто .:

. other_script.sh 
+0

Обратите внимание, что версия '.' работает на' sh', а также Bash. «Источник» работает только в Баше. –

11

выше ответов является правильным, но если запустить скрипт в другой папке, там будут какие-то проблемы.

Например, a.sh и b.sh находятся в одной папке, А включают б с . ./b.sh включить.

При запуске скрипта из папки, например с xx/xx/xx/a.sh, файл b.sh не будет найден: ./b.sh: No such file or directory.

Я использую

. $(dirname "$0")/b.sh 
Смежные вопросы