फ़ाइल को बैश शेल स्क्रिप्ट में कैसे शामिल करें


121

क्या शेल स्क्रिप्ट में किसी अन्य शेल स्क्रिप्ट को शामिल करने का एक तरीका है जो अपने कार्यों तक पहुंचने में सक्षम हो सकता है?

जैसे कि PHP में आप includeफ़ंक्शन के नाम से कॉल करने वाले कार्यों को चलाने के लिए अन्य PHP फ़ाइलों के साथ निर्देश का उपयोग कर सकते हैं ।



@ संदर्भ के लिए धन्यवाद। भले ही पोस्ट sourceकमांड को संदर्भित करता है , अपने आप में सवाल पूछ रहा है कि किसी sourceफ़ाइल के स्थान को कैसे इंगित किया जाए ।
मैक्फ्लैश

1
"मूल प्रश्न" स्टैक ओवरफ्लो के उत्प्रेरक हैं। आप समझते हैं कि यह साइट किसी भी अन्य साइट की तरह अनुक्रमित हो जाती है, और अब "कैसे एक बाश शेल स्क्रिप्ट में फ़ाइल को शामिल किया जाए" इस तरह से साइट के ट्रैफ़िक और एक्सपोज़र को बढ़ाने के लिए गूगल लिंकिंग पर दिखाई देगा। = डी
मेकफ्लेश

3
तुम समझदार हो! धन्यवाद आपका ग़ुस्सा!
मेकफ्लैश

4
@ ट्राउबडौर, यह टिप्पणी करने के लिए मूर्खतापूर्ण है कि उपयोगकर्ता को जवाब के लिए गुगली करना चाहिए था, जब कि वास्तव में मुझे पेज पर कैसे मिला। उदाहरण के लिए, आज यह विशिष्ट प्रश्न "बैश शामिल फ़ाइल" के लिए शीर्ष Google परिणाम था। क्या मुझे कुछ अन्य समाधान खोजने के लिए इस उत्तर पर छोड़ देना चाहिए था?
lwitzel

जवाबों:


192

बस अपनी स्क्रिप्ट के अंदर रखें:

source FILE

या

. FILE # POSIX compliant

$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

17
ध्यान दें कि । POSIX अनुपालन है, जबकि स्रोत नहीं है
Mathieu_Du

लेकिन यहाँ स्रोत ठीक वैसा ही शामिल नहीं है जैसा हम Cभाषा में करते हैं। यहाँ स्रोत मुख्य स्क्रिप्ट में बाल स्क्रिप्ट को निष्पादित कर रहा है। क्या होगा अगर मैं सिर्फ चाइल्ड स्क्रिप्ट से किसी विशेष फ़ंक्शन को कॉल करना चाहता हूं?
परेश मेयानी

8
. script.shसाथ भ्रमित मत करो ./script.sh। मैंने घंटों यह जानने की कोशिश की कि क्या हो रहा है
टिहोमिर मितकोव

जबकि । POSIX अनुपालन है, जिसका अर्थ है कि यह sh, डैश, zsh और अन्य POSIX गोले पर काम करेगा। इसका उपयोग करना बेहतर है। जैसा कि कुछ गोले अपने स्वयं के, समान हैं, लेकिन "स्रोत" का थोड़ा अलग संस्करण है जो आपके ऐप को तोड़ सकता है।
याकूब कोरबा

51

उपरोक्त उत्तर सही हैं, लेकिन यदि अन्य फ़ोल्डर में स्क्रिप्ट चलाते हैं, तो कुछ समस्या होगी।

उदाहरण के लिए, एक ही फ़ोल्डर में हैं a.shऔर b.shएक बी . ./b.shशामिल हैं।

जब स्क्रिप्ट को फ़ोल्डर से बाहर चलाया जाता है, उदाहरण के लिए xx/xx/xx/a.sh, फ़ाइल b.shनहीं मिलेगी ./b.sh: No such file or directory:।

मैं उपयोग करता हूं

. $(dirname "$0")/b.sh

33

हां, स्रोत या संक्षिप्त रूप का उपयोग करें जो सिर्फ है .:

. other_script.sh

3
ध्यान दें कि .संस्करण काम के shसाथ-साथ बैश भी है। "स्रोत" एक केवल बैश में काम करता है।
श्रीधर सरनोबत

2

मेरी स्थिति में, color.shउसी निर्देशिका से शामिल करने के लिए init.sh, मुझे निम्नानुसार कुछ करना होगा।

. ./color.sh

निश्चित नहीं कि क्यों ./और color.shसीधे नहीं । की सामग्री color.shइस प्रकार है।

RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`

उपयोग करने में File color.shत्रुटि नहीं होती है लेकिन, रंग प्रदर्शित नहीं होता है। मैंने इसका परीक्षण किया है Ubuntu 18.04और Bashसंस्करण है:

GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)


वह आपको केवल आपकी वर्तमान कार्यशील निर्देशिका में फ़ाइल देगा, न कि वह निर्देशिका जहां init.shवह है (यदि आप इसे ./init.shपहले स्थान पर लॉन्च करते हैं )।
ऋचाब

1

सिंटेक्स है source <file-name>

पूर्व। source config.sh

स्क्रिप्ट - config.sh

USERNAME="satish"
EMAIL="satish@linuxconcept.com"

कॉलिंग स्क्रिप्ट -

#!/bin/bash
source config.sh
echo Welcome ${USERNAME}!
echo Your email is ${EMAIL}.

आप किसी अन्य बैश स्क्रिप्ट में एक बैश स्क्रिप्ट को शामिल करना सीख सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.