2010-02-04 1 views
11

Sto scrivendo uno script bash che chiama funzioni dichiarate nella shell genitore, ma non funziona.Bash - Come chiamare una funzione dichiarata in una shell genitore?

Ad esempio:

$ 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 

Come si può vedere lo script ./test.sh è in grado di chiamare la funzione myfunc, c'è qualche modo per rendere tale funzione visibile allo script?

risposta

23

Prova

$ export -f myfunc 

nella shell genitore, al export la funzione.

+1

Ora, che ho fatto * non * sapere. –

+0

@Andrew: giusto! Ci sono alcune risposte che non possono essere migliorate. –

+0

Queste cose dovrebbero essere meglio documentate – erjoalgo

3

@OP, normalmente si inserirà la propria funzione che ogni script utilizza in un file, quindi lo si trova nella sceneggiatura. esempio, salvare

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

in un file chiamato/percorso/libreria. Poi nello script, lo legge come questo:

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

Questo funziona anche, ma ho notato ${0} assume valore dei genitori: Forse più utile se non si vuole avere un po 'di chiamate di esportazione negli script.

script1:

#!/bin/bash 

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

func "1" 
$(. ./script2) 

SCRIPT2:

#!/bin/bash 

func "2" 

uscita:

[mymachine]# ./script1 
func 1 
func 2