shell
2013-08-31 6 views 37 likes 
37

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

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

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" 

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

+0

कौन सा खोल प्रयोग कर रहे हैं (उदाहरण के लिए bash, ksh, sh) – Tom

+0

[संभव ग्लोबल वेरिएबल BASH] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/10779771/save-global-variables-bash) – tripleee

+1

संभावित डुप्लिकेट [पर्यावरण से एक चर को निर्यात करें बिना सोर्सिंग के बैश स्क्रिप्ट] (http://stackoverflow.com/questions/16618071/export-a-variable-to-the-environment-from-a-bash-script-without-sourcing-it) –

उत्तर

24

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

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

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

अर्धविराम भी अनावश्यक है।

अब तक:

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

(जो लोग इस जवाब downvote के लिए, आपको पता होना चाहिए कि ओपी स्पष्ट रूप से एक खोल की जरूरत नहीं किया गया था:

#!/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 के लिए आप के साथ चला सकते हैं स्क्रिप्ट जो एक -इंटरएक्टिव-शैल पर वैरिएबल निर्यात करेगी - और एक बार चलाने वाली शेल स्क्रिप्ट पर नहीं, जहां source या . का उपयोग करने के लिए कॉल करना यह अर्थहीन होगा जब तक कि आप वास्तव में एनी से स्क्रिप्ट को कॉल नहीं कर रहे हों थर्ड स्क्रिप्ट बेशक आप source या . का उपयोग कर सकते हैं यदि यह वास्तव में आवश्यक है, लेकिन एक और समस्या भी थी जिसे ठीक करने की आवश्यकता थी, और ऐसा लगता है कि इस संदर्भ पर वास्तविक समस्या एकल उद्धरणों का उपयोग थी।

इसे कम मत करो क्योंकि यह आपकी मदद नहीं करता है। जवाब प्रश्न के लिए था, और ओपी के लिए।

यह अगर ओपी -actually mentioned- है कि यह एक खोल स्क्रिप्ट के माध्यम से एक इंटरैक्टिव खोल पर स्थापन निर्यात योग्य वातावरण चर के लिए वास्तव में था लागू किया गया होता।)

+1

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

+0

@ प्रग्राओ पैरामाटर विस्तार केवल एकल उद्धरणों में नहीं होता है। आप आगे उद्धरण के बारे में विवरण समझा सकते हैं [यहां] (https://www.gnu.org/software/bash/manual/html_node/Quoting.html)। – konsolebox

+2

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

127

आप source के रूप में स्क्रिप्ट या आशुलिपि चलाने की आवश्यकता .

source ./myscript.sh 

या

. ./myscript.sh 

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

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

+0

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

+2

इस फिक्स ने मेरी समस्या का हल किया – sampathpremarathna

+1

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

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