2011-08-03 27 views
7

उदाहरण के लिए, निम्न आदेश काम नहीं करते हैं। मुझे आश्चर्य है कि इसके आसपास कैसे काम करना है, धन्यवाद।एक बैश स्क्रिप्ट में, बाहर परिभाषित बैश फ़ंक्शन कैसे चलाएं?

[[email protected] ~]$ function showxx() { echo xx; } 
[[email protected] ~]$ showxx 
xx 
[[email protected] ~]$ cat a.bash 
#!/bin/bash 
showxx 
[[email protected] ~]$ ./a.bash 
./a.bash: line 2: showxx: command not found 

उत्तर

5

आपको अपने कार्यों को निर्यात करने की आवश्यकता है। set -a के साथ आप इसे बनाते समय सबकुछ निर्यात कर सकते हैं (मेरी प्राथमिकता), या आप export -f showxx के साथ व्यक्तिगत रूप से फ़ंक्शंस निर्यात कर सकते हैं। या तो इसे पर्यावरण में डाल देगा, और बच्चे के गोले उन्हें लेने में सक्षम होंगे।

+0

यह वही है जो मैं चाहता हूं, धन्यवाद। –

+0

@evilotto से +1: 'export -f' के बारे में नहीं पता था। धन्यवाद! – shellter

3

आपको स्थानीय प्रक्रिया के 'दायरे' में दिखाई देने के लिए फ़ंक्शन को परिभाषित करना होगा।

जब आप कमांड लाइन पर कोई फ़ंक्शन दर्ज करते हैं, तो यह अब टर्मिनल खोल की बैश की प्रतिलिपि के अंदर 'जीवित' है।

जब आप एक स्क्रिप्ट शुरू करते हैं, तो export के साथ चिह्नित चर केवल टर्मिनल के बच्चे के रूप में चल रहे हैं। (हम अभी export में नहीं पहुंचेंगे ;-)।

अपनी स्क्रिप्ट के अंदर फ़ंक्शन प्राप्त करने के लिए, आपको इसे स्क्रिप्ट के अंदर परिभाषित करना होगा।

cat a.bash 
#!/bin/bash 
function showxx() { echo xx; } 
showxx 

या आप इसे एक अलग फाइल और यह (के साथ '।') 'स्रोत' में समारोह रख सकते हैं, तो के रूप में अगर यह फाइल के अंदर विस्तार था, यानी

cat showxx.bfn 
function showxx() { echo xx; } 

cat a.bash 
. showxx.bfn 
showxx 

। बीएफएन बस कुछ है जो मैं फ़ाइल के अंदर क्या है, जैसे bfn = 'bash function' दस्तावेज़ में मदद करने के लिए उपयोग करता हूं।

'।' स्रोत कमांड है।

मुझे उम्मीद है कि इससे मदद मिलती है।

पीएस जैसा कि आप एक नया उपयोगकर्ता प्रतीत होता है, अगर आपको कोई उत्तर मिलता है जो आपको इसे स्वीकार करने के लिए याद रखने में मदद करता है, और/या इसे एक उपयोगी उत्तर के रूप में + (या -) देता है।

1

अपनी स्क्रिप्ट को पहले से चलने वाले बिंदु और स्थान के साथ कॉल करें।

. a.bash

संबंधित मुद्दे