Ответ 1
Try
$ export -f myfunc
в родительской оболочке, экспортировать эту функцию.
Я пишу 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?
Try
$ export -f myfunc
в родительской оболочке, экспортировать эту функцию.
@OP, обычно вы добавляете свою функцию, которую каждый script использует в файле, затем вы отправляете ее в свой script. например, сохранить
function myfunc() { echo "Here in myfunc" ; }
в файле /path/library. Затем в script введите его так:
#!/bin/bash
. /path/library
myfunc
Это также работает, но я заметил, что ${0}
принимает родительское значение:
Возможно, более полезно, если вы не хотите иметь кучу экспортных вызовов в своих сценариях.
script1:
#!/bin/bash
func()
{
echo func "${1}"
}
func "1"
$(. ./script2)
Скрипт2:
#!/bin/bash
func "2"
Вывод:
[mymachine]# ./script1
func 1
func 2