कृपया मुझे बताएं कि पैरेंट शेल (बैश, श या क्श) में एक फंक्शन को कैसे एक्सपोर्ट किया जाए ताकि फंक्शन पैरेंट प्रोसेस से प्राप्त होने वाली सभी चाइल्ड प्रोसेस को उपलब्ध हो जाए?
कृपया मुझे बताएं कि पैरेंट शेल (बैश, श या क्श) में एक फंक्शन को कैसे एक्सपोर्ट किया जाए ताकि फंक्शन पैरेंट प्रोसेस से प्राप्त होने वाली सभी चाइल्ड प्रोसेस को उपलब्ध हो जाए?
जवाबों:
यह export -fसुविधा बैश के लिए विशिष्ट है:
माता-पिता
#!/bin/bash
plus1 () { echo $(($1 + 1)); }
echo $(plus1 8)
export -f plus1
./child 14 21
बच्चा
#!/bin/bash
echo $(plus1 $(($1 * $2)) )
में sh, चार्ल्स डफी द्वारा उल्लेखित एक समारोह का निर्यात करना संभव नहीं है ।
यदि आप ksh या zsh का उपयोग कर रहे हैं:
आप पर्यावरण चर का उपयोग कर सकते हैं FPATH, जिसमें आप अपने सभी कार्य कर सकते हैं।
यदि FPATHएक इंटरएक्टिव इंटरप्रेटर पर सेट किया गया है, और एक कमांड या फ़ंक्शन वर्तमान शेल वातावरण या में नहीं मिला हैPATH , तो वहां सूचीबद्ध निर्देशिकाओं को लापता कमांड के नाम वाली फ़ाइल के अस्तित्व के लिए खोजा जाता है। यदि कोई पाया जाता है, तो यह वर्तमान शेल वातावरण में उपलब्ध होता है, और फ़ंक्शन को परिभाषित करने की अपेक्षा करता है।
तो, आप अपने सभी कार्यों को एक स्थान पर रख सकते हैं FPATHऔर बाल स्क्रिप्ट भी इसे खोजने में सक्षम होगी।
आप autoloadआवश्यक कार्यों को लोड करने के लिए शेल स्क्रिप्ट में कमांड का उपयोग कर सकते हैं :
autoload fun_a fun_b
Zsh में, काम autoloadकरने के लिए आवश्यक है FPATH। में kshऔर इसके करीबी रिश्तेदारों का मानना है कि यह केवल FPATHआपके PATH में नियमित कमांड को ओवरराइड करने के लिए परिभाषित कार्यों का कारण बनता है , क्योंकि वे सीधे परिभाषित होंगे।
पर कुछ विवरण FPATHऔर autoload:
यदि आप सबस्क्रिप्शन बनाते हैं, ( )तो वे सभी परिभाषाओं, मापदंडों और शेल चर का एक स्नैपशॉट इनहेरिट करेंगे।
यदि आप उन्हें कार्यक्रमों की तरह क्रियान्वित करते हैं तो आप परिभाषाएँ रख सकते हैं .bashrc।
यदि आप एक मौजूदा स्क्रिप्ट को एक रैपर को निष्पादित करने या एक PATH कमांड के लिए प्रतिस्थापन करने की कोशिश कर रहे हैं, तो .bashrcनिष्पादन के विवरण के आधार पर काम करेगा। यदि नहीं, तो आप इसके बजाय एक रैपर स्क्रिप्ट निष्पादित कर सकते हैं जो बस एक .या करता हैsource एक फ़ाइल है कि परिभाषित करता है कार्य करता है और उसके बाद आदेशों के साथ खोल स्क्रिप्ट के साथ एक ही बात प्रतिस्थापित किया जा करने के लिए करता है शामिल की।
आवरण स्क्रिप्ट कुछ इस तरह दिख सकती है:
script=$1
shift
. include.sh
. $script "$@"
विचार यह है कि पहला पैरामीटर वास्तविक स्क्रिप्ट का नाम है और शेष पैरामीटर args हैं, फिर इसके बजाय उपरोक्त स्क्रिप्ट को चलाया जाता है।
declare -x -f NAME
और जानकारी
फ़ंक्शन और प्रदर्शन नाम और परिभाषाओं को प्रतिबंधित करें -x NAME निर्यात करने के लिए
bash । ( kshसमकक्षों के लिए declare, typesetएक -xविकल्प है, लेकिन यह केवल चर पर लागू होता है , कार्यों के लिए नहीं; डिट्टो के लिए zsh)।