Bash - Как вызвать функцию, объявленную в родительской оболочке? - PullRequest
12 голосов
/ 04 февраля 2010

Я пишу bash-скрипт, который вызывает функции, объявленные в родительской оболочке, но он не работает.

Например:

$ function myfunc() { echo "Here in myfunc" ; }
$ myfunc
Here in myfunc
$ cat test.sh 
#! /bin/bash

echo "Here in the script"
myfunc
$ ./test.sh 
Here in the script
./test.sh: line 4: myfunc: command not found
$ myfunc
Here in myfunc

Как вы можете видеть скрипт ./test.sh не может вызвать функцию myfunc, есть ли способ сделать эту функцию видимой для скрипта?

Ответы [ 3 ]

25 голосов
/ 04 февраля 2010

Попробуйте

$ export -f myfunc

в родительской оболочке для экспорта функции.

3 голосов
/ 04 февраля 2010

@ OP, обычно вы помещаете свою функцию, которую каждый скрипт использует в файл, а затем отправляете ее в свой скрипт.Например, сохраните

function myfunc() { echo "Here in myfunc" ; }

в файле / path / library.Затем в вашем скрипте, введите его так:

#!/bin/bash
. /path/library
myfunc
0 голосов
/ 27 июня 2016

Это также работает, но я заметил, что ${0} принимает значение родителя: может быть более полезным, если вы не хотите, чтобы в ваших скриптах было несколько вызовов экспорта.

script1:

#!/bin/bash

func()
{
  echo func "${1}"
}

func "1"
$(. ./script2)

script2:

#!/bin/bash

func "2"

Вывод:

[mymachine]# ./script1
func 1
func 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...