2010-02-04 8 views
11

मैं एक बैश स्क्रिप्ट लिख रहा हूं जो पैरेंट शैल में घोषित कार्यों को कॉल करता है, लेकिन यह काम नहीं करता है।बैश - एक पैरेंट खोल में घोषित फ़ंक्शन को कैसे कॉल करें?

उदाहरण के लिए

:

$ 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 -f myfunc 
माता पिता खोल में

प्रयास करें, export कार्य करने के लिए।

+1

अब, यह मैंने किया था * * पता नहीं। –

+0

@ एंड्रयू: ठीक है! कुछ जवाब हैं जिन पर अभी सुधार नहीं किया जा सकता है। –

+0

इन चीजों को बेहतर दस्तावेज किया जाना चाहिए – erjoalgo

3

@OP, आमतौर पर आप अपना फ़ंक्शन डाल देंगे कि प्रत्येक स्क्रिप्ट फ़ाइल में उपयोग करती है, फिर आप इसे अपनी स्क्रिप्ट में स्रोत करते हैं। उदाहरण के लिए, कहा जाता है/path/पुस्तकालय एक फ़ाइल में

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 
संबंधित मुद्दे