2010-02-04 10 views
11

Piszę skrypt bash, który wywołuje funkcje zadeklarowane w powłoce rodzica, ale to nie działa.Bash - Jak wywołać funkcję zadeklarowaną w powłoce rodzica?

Na przykład:

$ 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 

Jak widać skrypt ./test.sh jest w stanie wywołać funkcję myfunc, czy jest jakiś sposób, aby tę funkcję widoczną do skryptu?

Odpowiedz

23

Spróbuj

$ export -f myfunc 

w powłoce dominującego, wobec export funkcję.

+1

teraz, że zrobiłem * nie * wiem. –

+0

@Andrew: Dobrze! Jest kilka odpowiedzi, których nie można poprawić. –

+0

Te rzeczy powinny być lepiej udokumentowane – erjoalgo

3

@OP, normalnie umieścisz swoją funkcję, którą każdy skrypt użyje w pliku, a następnie dodasz ją do skryptu. Przykładem zapisz

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

w pliku o nazwie/ścieżka/library. Następnie w skrypcie, źródło to tak:

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

To działa również ale zauważyłem ${0} przyjmuje wartość rodziców: Może bardziej przydatna, jeśli nie chcesz mieć kilka połączeń eksportowych w skryptach.

script1:

#!/bin/bash 

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

func "1" 
$(. ./script2) 

script2:

#!/bin/bash 

func "2" 

wyjściowa:

[mymachine]# ./script1 
func 1 
func 2 
Powiązane problemy