2010-02-04 3 views
11

Ich schreibe ein Bash-Skript, das Funktionen aufruft, die in der Parent-Shell deklariert sind, aber es funktioniert nicht.Bash - Wie eine Funktion aufgerufen wird, die in einer übergeordneten Shell deklariert ist?

Zum Beispiel:

$ 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 

Wie Sie das Skript sehen können ./test.sh ist nicht in der Lage, die Funktion myfunc zu nennen, ist es eine Möglichkeit, diese Funktion sichtbar, um das Skript zu machen?

Antwort

23

Versuchen

$ export -f myfunc 

in der übergeordneten Schale, zu export die Funktion.

+1

Nun, das ich habe * nicht * wissen. –

+0

@Andrew: Richtig! Es gibt einige Antworten, die einfach nicht verbessert werden können. –

+0

Diese Dinge sollten besser dokumentiert werden – erjoalgo

3

@OP, normalerweise würden Sie Ihre Funktion, die jedes Skript in einer Datei verwendet, setzen, dann Sie es in Ihrem Skript Quelle. Beispiel speichern

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

in einer Datei namens/path/Bibliothek. Dann in Ihrem Skript, Quillt es dies mag:

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

Dies funktioniert auch, aber ich bemerkte ${0} Eltern Wert annimmt: Vielleicht nützliche, wenn Sie nicht über eine Reihe von Export Anrufen in Ihren Skripte haben wollen.

script1:

#!/bin/bash 

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

func "1" 
$(. ./script2) 

script2:

#!/bin/bash 

func "2" 

Ausgang:

[mymachine]# ./script1 
func 1 
func 2 
Verwandte Themen