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 ответов
@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