एक बार में, सेट किए गए चर का निर्यात कैसे करें?


39

setकमांड नीचे की तरह सभी स्थानीय चर प्रदर्शित करता है। मैं इन चरों को एक ही बार में कैसे निर्यात करूं?

>set
a=123
b="asd asd"
c="hello world"

आप एक ही बार में निर्यात का क्या मतलब है? आप एक पंक्ति में परिभाषित करने के लिए अर्ध कॉलनों का उपयोग कर सकते हैं ... जैसे = 123; b = "asd asd"; c = "हैलो वर्ल्ड"
Raza



आपका प्रश्न अस्पष्ट है। यह है कि setउत्पादन का एक अंश आप दिखा रहे हैं? यदि ऐसा है, तो यह नहीं है bash। क्या आप विशेष शेल चर सहित वर्तमान में सेट किए गए सभी चर निर्यात करना चाहते हैं? या केवल उन 3 चर में जैसे export a b c?
स्टीफन चेजालस

export ${!T*}किसी भी परिभाषित पैरामीटर को निर्यात करेगा जिसका नाम शुरू होता है T। दुर्भाग्य से, सभी परिभाषित मापदंडों की सूची को आसानी से उत्पन्न करने का एक तरीका नहीं लगता है ।
शेपनर

जवाबों:


72

चर सेट करने से पहले निम्न कमांड चलाएँ:

set -a 

आदमी पृष्ठ:

-a
जब यह विकल्प चालू होता है, तो निर्यात विशेषता प्रत्येक चर के लिए निर्धारित की जाएगी, जिसके लिए एक असाइनमेंट किया जाता है;

इस विकल्प को बंद करने के लिए, set +aबाद में चलाएं ।

उदाहरण:

set -a
. ./environment
set +a

कहाँ environmentशामिल हैं:

FOO=BAR
BAS='quote when using spaces'

13
हालांकि, चर को असाइन करने से पहले इसे सक्षम किया जाना चाहिए। यह पहले से निर्दिष्ट चर के लिए कुछ भी नहीं करता है।
chepner

1
@chepner, धन्यवाद मैं उल्लेख करना भूल गया !!
नितिन

यह भी स्वचालित रूप से उसी तरह कार्य करता है जैसेfunction example(){ echo good; }; export -f example
ओलिवर I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. सबसे पहले, सभी सेट पर्यावरण चर प्राप्त करें: (set -o posix ; set) संदर्भ: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-बा

  2. सभी पर्यावरण चर नाम प्राप्त करें, जिन्हें अंतरिक्ष से अलग किया गया है: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' संदर्भ: नई लाइन के बिना awk- प्रिंटिंग कॉलम मान और अल्पविराम और https://stackoverflow.com/questions/14212993/ अनियमित-expression-to-match-a-pattern-inside- awk-आदेश

  3. अब, हमें इन चरों को निर्यात करने की आवश्यकता है, लेकिन xargs ऐसा नहीं कर सकते क्योंकि यह बाल प्रक्रिया की मांग करता है, निर्यात को वर्तमान प्रक्रिया के साथ चलाया जाना चाहिए। echo "export" ...हम चाहते हैं एक कमांड का निर्माण, तो इसे चलाने के लिए `` का उपयोग करें। वह सब है: पी।


यू एंड एल एसई के लिए welcomme। हो सकता है कि आप अपनी पोस्ट को संपादित कर सकते हैं और कुछ अन्वेषण दे सकते हैं।
12

1
यह मान लेना सही नहीं है कि पर्यावरण चर नाम केवल az और AZ से मिलकर होगा। वे आमतौर पर अंडरस्कोर और अंकों को भी शामिल करते हैं, इसलिए पैटर्न होगा [a-zA-Z_][a-zA-Z0-9_]*। आपके द्वारा उपयोग किए जा रहे शेल के आधार पर इस पर कुछ विविधताएं हैं, लेकिन यह सुरक्षित / पोर्टेबल दृष्टिकोण है।
क्रिस जॉनसन

अच्छा बिंदु @ क्रिस जॉनसन - अपडेट किया गया!
विल् मूर III 15

3

आप exportचर नाम के माध्यम से awkऔर evalपरिणामी आउटपुट को प्रस्तुत कर सकते हैं:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvपहले से ही निर्यात किए गए चर को प्रिंट करता है। यह भी ठीक से काम नहीं करेगा अगर वहाँ चर है कि newline वर्ण होते हैं।
स्टीफन चेज़लस

2

यह काम करता है यदि आपका शेल बैश है (संभवतः अन्य शेल भी)

export > /my/env/var/file

आपकी नई फ़ाइल में सभी वर्तमान में परिभाषित चर ... जैसे प्रविष्टियों के साथ एक डंप होगा

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

फिर उन सभी एनवी वार्स मुद्दे के साथ वर्तमान शेल को जैक करने के लिए

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