2010-02-04 2 views
11

부모 쉘에 선언 된 함수를 호출하는 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를 호출 할 수 없습니다 스크립트를 볼 수있는 것처럼, 스크립트에 표시하는 기능을 할 수있는 방법이있다?

답변

23

export 함수에, 부모 쉘에서

$ export -f myfunc 

을보십시오.

+1

이 * * 모른다. –

+0

@ Andrew : 맞아! 그저 개선 할 수없는 몇 가지 해답이 있습니다. –

+0

이러한 것들을 더 잘 문서화해야합니다. – erjoalgo

3

@OP 일반적으로 모든 스크립트가 파일에서 사용하는 기능을 넣은 다음 스크립트에서 가져옵니다. 예를 들어, 전화/경로/라이브러리 파일에

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

을 저장합니다. 이것은 또한 작동

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

을하지만 난 ${0} 부모의 값을 취주의 : 그런 다음 스크립트에서, 소스는이처럼 당신이 당신의 스크립트 수출 통화의 무리를하지 않으려면 아마 더 유용 을.

script1이 :

#!/bin/bash 

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

func "1" 
$(. ./script2) 

script2 :

#!/bin/bash 

func "2" 

출력 : 내가 한 것을

이제
[mymachine]# ./script1 
func 1 
func 2 
관련 문제