पर्यावरण चर सेट करने के लिए शेल स्क्रिप्ट


84

मैं चरों को निर्यात करने के लिए एक शेल स्क्रिप्ट लिखना चाहता हूं।

नीचे मैंने स्क्रिप्ट सूचीबद्ध की है।

echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH='/home/linux/Practise/linux-devkit/bin/:$PATH';
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-';
echo "Export CROSS_COMPILE done"

लेकिन यह ठीक से काम नहीं करता है। मुझे व्यक्तिगत रूप से इसके बजाय शेल प्रॉम्प्ट पर कमांड निष्पादित करना है।


आप किस शेल का उपयोग कर रहे हैं (जैसे bash, ksh, sh)
टॉम



जवाबों:


49

कृपया हमें स्क्रिप्ट के और अधिक भाग दिखाएं और हमें बताएं कि आपके पास व्यक्तिगत रूप से निष्पादित करने के लिए क्या आदेश थे और बस करना चाहते हैं।

इस बीच आपको चर का विस्तार करने के लिए दोहरे उद्धरण चिह्नों का उपयोग नहीं करना है:

export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"

एकल आदेश के अंत में अर्धविराम भी अनावश्यक हैं।

अब तक:

#!/bin/sh
echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

इसके लिए suआप इसे चला सकते हैं:

su -c 'sh /path/to/script.sh'

नोट: ओपी स्पष्ट रूप से शेल स्क्रिप्ट का उपयोग करके एक इंटरैक्टिव शेल में निर्यात चर बनाने के तरीके के बारे में नहीं पूछ रहा था। उन्होंने केवल अपनी स्क्रिप्ट का मूल्यांकन करने के लिए कहा। उन्होंने इस बात का विवरण नहीं दिया कि उनकी लिपि का उपयोग कैसे किया जाएगा। यह इंटरेक्टिव शेल का उपयोग करके .या उससे हो सकता है source। यह एक स्टैंडअलोन स्किप्ट हो सकता था, या यह sourceकिसी अन्य स्क्रिप्ट से 'डी' हो सकता था । पर्यावरण चर इंटरैक्टिव गोले के लिए विशिष्ट नहीं हैं। इस जवाब ने उसकी समस्या हल कर दी।


1
HI कोनोक्सबॉक्स !! आपका बहुत बहुत धन्यवाद । लेकिन मुझे अंतर समझ में नहीं आया .. डबल उद्धरण में निर्यात पथ = "/ home / linux / Practice / linux-devkit / bin /: $ PATH"। & quot / CROSS_COMPILE = '/ home / linux / Practice / linux-devkit / bin / arm-arago-linux-gnueabi-' को एकल उद्धरण में निर्यात करें। यू द्वारा संशोधित स्क्रिप्ट ठीक काम करती है।
प्राग राव

@PragRao पैरामैटर विस्तार केवल सिंगल कोट्स में नहीं होता है। आप यहाँ आगे उद्धृत करने के बारे में विवरण बता सकते हैं ।
konsolebox

3
@konsolebox प्रश्न का नाम "शेल स्क्रिप्ट को पर्यावरण चर सेट करने के लिए" जैसा लगता है - समुदाय के अधिकांश भाग को यह प्रश्न वर्तमान शेल ( sourceया .) से इस तरह की स्क्रिप्ट को चलाने की समस्या को हल करने के लिए मिला । मैं सराहना करता हूं कि आप ओपी के प्रश्न पर सटीक उत्तर देते हैं, लेकिन मुझे यह विषय Google से मिला, और अगले उत्तर ने मुझे आपकी तुलना में अधिक मदद की। दूसरे उत्तर के लिए अपवोट ( मेरी राय के साथ sourceऔर .पुष्टि करें ...
avtomaton

@avtomaton फिर, यह अन्य लोगों के बारे में नहीं है जो इसे Google पर ढूंढते हैं। यह केवल प्रश्न के मूल दृष्टिकोण के बारे में है। यदि आपको इस बारे में चिंता है कि किसी प्रश्न को कैसे बदला जाना चाहिए, या एक उत्तर कैसे प्रस्तुत किया जाना चाहिए, तो इसे मेटा में चर्चा करने पर विचार करें।
konsolebox

230

आपको स्क्रिप्ट को sourceशॉर्टहैंड के रूप में चलाने की आवश्यकता है.

source ./myscript.sh

या

. ./myscript.sh

यह मौजूदा शेल के भीतर चलेगा, यह सुनिश्चित करेगा कि स्क्रिप्ट द्वारा बनाया गया या संशोधित किया गया कोई भी स्क्रिप्ट पूरा होने के बाद उपलब्ध होगा।

केवल फ़ाइल नाम का उपयोग करके स्क्रिप्ट को चलाना स्क्रिप्ट को अलग-अलग सबस्क्रिप्शन में निष्पादित करेगा।


2
स्रोत का उपयोग करके ./setenv.sh -: स्रोत को त्रुटि नहीं मिली। और का उपयोग करके। ./setenv.sh यह देता है कि setenv.sh नहीं खोल सकता। क्या आप कृपया इस पर मेरी मदद कर सकते हैं। साभार
विशाल

1
एक घंटे के लिए मेरे सिर को खरोंच कर रहा था कि क्यों उन लानत निर्यात संस्करण वहां नहीं पहुंचे (zsh) typeset -gx, निर्यात आदि की कोशिश की और मेरे wff था? पल और अभी तक - नहीं पता था कि एक उपधारा अपने स्वयं के दायरे के साथ निष्पादित किया जाता है। मेरे दिन को बचाने से धन्यवाद आसन्न क्रोध प्रबंधन से
Inoperable


0

मैं इसे हल नहीं कर सकता source ./myscript.sh । यह कहता है कि स्रोत को त्रुटि नहीं मिली।
उपयोग करते समय भी विफल . ./myscript.sh। यह myscript.sh नहीं खोल सकता है।

तो मेरा विकल्प इसे एक टेक्स्ट फाइल में डाल दिया जाता है जिसे अगली स्क्रिप्ट में कहा जाता है।

#!/bin/sh
echo "Perform Operation in su mode"
echo "ARCH=arm" >> environment.txt
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export "CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?" >> environment.txt
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

जब भी जरूरत हो, तब उसे कॉल करें:

while read -r line; do
    line=$(sed -e 's/[[:space:]]*$//' <<<${line})
    var=`echo $line | cut -d '=' -f1`; test=$(echo $var)
    if [ -z "$(test)" ];then eval export "$line";fi
done <environment.txt

1
आप myscript.shइसे संशोधित कर सकते हैं ताकि यह एक फ़ाइल environment.sh(निर्यात विवरणों के साथ) उत्पन्न करता है environment.sh, जबकि जब भी जरूरत हो, लूप के बजाय सिर्फ स्रोत ।
स्लाजमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.