मैं कुछ चरों को छोड़कर सभी पर्यावरण चर मुद्रित करना चाहता हूं।
इसलिए मुझे स्टैक ओवरफ्लो पर एक समाधान मिला: नाम
while IFS='=' read -r name value; do
if [ ! "$name" = "SOMEVAR" -a ! "$name" = "SOMEOTHERVAR" ]; then
echo "$name=$value"
fi
done < <(env)
हालाँकि यह काम नहीं करता है यदि मेरे पर्यावरण चर में नई पंक्तियाँ हैं, जैसे:
export SOMEVAR="some
text with
newlines"
उपरोक्त समाधान के साथ यह प्रिंट होगा:
text with=
newlines=
PWD=/home/...
...
मैंने sed
के साथ नल-टर्मिनेटेड स्ट्रिंग्स और मल्टीलाइन मिलान का उपयोग करने का भी प्रयास किया:
env -0 | sed -e '{N; s@SOMEVAR.*\x0@@ ; D}' | tr '\0' '\n'
लेकिन यह आउटपुट को काट देता है और हमेशा एक चर की अंतिम पंक्ति को पहले मल्टीलाइन सामग्री के साथ प्रिंट करता है:
newlines
PWD=/home/...
...
क्या उन्हें प्रिंट करते समय मल्टीलाइन पर्यावरण चर को छोड़ने का कोई तरीका है?
2 जवाब
आपके पास लगभग यह था, आपको बस env -0
के आउटपुट पर एक रीड कमांड और नल डिलीमीटर के साथ लूप करना होगा और रेगेक्स ऑपरेटर का उपयोग करके चर को बाहर करना होगा
while read -r -d '' line; do
[[ ! $line =~ ^(SOMEVAR|SOMEOTHERVAR)= ]] && printf '%s\n' "$line"
done < <(env -0)
read
कमांड के साथ d ''
का अर्थ है कि इनपुट को शून्य परिसीमन वर्ण पर परिसीमित करना। जबकि लूप तब तक चलता है जब तक कि अंतिम सीमांकित रेखा को पार्स नहीं किया जाता है।
साथ ही यह केवल उन सभी चरों को प्रिंट करता है, जिन्हें आप टालना चाहते हैं। प्रत्येक पंक्ति की आगे की प्रक्रिया के लिए, आप कुंजी/मान जोड़े को विभाजित करने के लिए $line
चर को पार्स कर सकते हैं और तदनुसार इसका उपयोग कर सकते हैं।
या यदि आपका इरादा बहु-पंक्ति स्ट्रिंग वाले किसी भी चर की पहचान करना था, तो आप इसे रेगेक्स के साथ बाहर कर सकते हैं
[[ ! $line =~ $'\n' ]]
आप बैश बिलिन compgen
का उपयोग कर सकते हैं जो -v
विकल्प के साथ उपयोग किए जाने पर सभी env चर नामों को आउटपुट करता है:
compgen -v # prints all variable names
अवांछित नामों को बाहर करने और बाकी प्रिंट करने के लिए अब आप इसे आसानी से लूप में उपयोग कर सकते हैं:
while read var; do
echo "$var=${!var}"
done < <(compgen -v | grep -vxFE '(SOMEVAR|SOMEOTHERVAR)')
संबंधित सवाल
नए सवाल
bash
बैश कमांड शेल के लिए लिखी गई लिपियों के बारे में प्रश्नों के लिए। त्रुटियों / वाक्यविन्यास त्रुटियों के साथ शेल स्क्रिप्ट के लिए, कृपया यहां पोस्ट करने से पहले शेलचेक प्रोग्राम (या वेब शेलचेक सर्वर पर https://shellcheck.net) के साथ उन्हें जांचें। बैश के इंटरैक्टिव उपयोग के बारे में सवाल स्टैक ओवरफ्लो की तुलना में सुपर उपयोगकर्ता पर ऑन-टॉपिक होने की अधिक संभावना है।