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

Я пишу сценарий 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 ответов


попробовать

$ export -f myfunc

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


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

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

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

#!/bin/bash
. /path/library
myfunc

Это также работает, но я заметил принимает значение родителя : Возможно, более полезно, если вы не хотите иметь кучу вызовов экспорта в своих сценариях.

script1:

#!/bin/bash

func()
{
  echo func ""
}

func "1"
$(. ./script2)

script2:

#!/bin/bash

func "2"

выход:

[mymachine]# ./script1
func 1
func 2