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

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

Например:

$ 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

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

Ответ 2

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

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

в файле /path/library. Затем в script введите его так:

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

Ответ 3

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

script1:

#!/bin/bash

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

func "1"
$(. ./script2)

Скрипт2:

#!/bin/bash

func "2"

Вывод:

[mymachine]# ./script1
func 1
func 2