मैं लिनक्स बैश टर्मिनल में वर्तमान में परिभाषित सभी पर्यावरण चर की सूची कैसे देखूं?


31

लिनक्स बैश टर्मिनल में, अक्सर कई पर्यावरण चर होते हैं जिन्हें सेट किया गया है, जैसे $PATHऔर $HOME

क्या यह संभव है कि सभी पर्यावरण चर जो स्थापित किए गए हैं? कैसे?


जवाबों:


32

टीएल; डीआर: उपयोग(set -o posix ; set)


बैश मैनुअल के अनुसार, आप सेट किए गए सभी पर्यावरण चर दिखाने के लिए अंतर्निहित कमांड का उपयोगset कर सकते हैंsetआदेश भी किसी भी कार्य की परिभाषाओं को प्रदर्शित करेगा। यदि आप केवल चर देखना चाहते हैं, और फ़ंक्शंस नहीं, तो आप सेट कमांड चलाने से पहले POSIX मोड चालू कर सकते हैं। ऐसा करने का सबसे आसान तरीका है set -o posix, लेकिन जब तक आप इसे बंद नहीं करते हैं, तब तक यह पॉसिक्स मोड को छोड़ देगा set +o posix

इसलिए, निम्न कमांड आपके वर्तमान शेल में POSIX अनुपालन को प्रभावित किए बिना सब-डिले का उपयोग करके सभी परिभाषित पर्यावरण चर दिखाएगा।

(set -o posix ; set)

@RedGrittyBrick और @iglvzx ने envकमांड का उपयोग करने का सुझाव दिया , हालांकि यह कमांड पर्यावरण चर की पूरी सूची प्रदान नहीं करेगा। envकेवल उन varaibles को दिखाएगा जो निर्यात के लिए चिह्नित किए गए हैं। के उत्पादन की तुलना करें env | sortऔर export -pऔर आप मैं क्या मतलब देखेंगे। आप चला सकते हैं comm -23 <(set -o posix; set) <(env|sort)यदि आप देखना चाहते हैं कि कौन से पर्यावरण चर निर्यात नहीं किए जा रहे हैं।

विसंगति का कारण envएक अलग निष्पादन योग्य है setजिसके विपरीत एक शेल निर्मित कमांड है। बैश मैनुअल के अनुसार, जब एक कमांड निष्पादित होता है जो शेल निर्मित कमांड या फ़ंक्शन नहीं है, तो इसे केवल पर्यावरण चर प्राप्त होंगे जो बैश में निर्यात के लिए चिह्नित किए गए हैं । कई चर हैं जो निर्यात नहीं किए जाते हैं। इसलिए, यदि आप उन सभी चरों को देखना चाहते हैं जिन्हें आपके शेल ने परिभाषित किया है, तो आपको setकमांड का उपयोग मैनुअल में कहा गया है।

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

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

आप देखेंगे कि setआउटपुट प्रदान करता है जबकि envनहीं करता है।


24

envबिना तर्क वाली कमान "निर्यात" पर्यावरण चर और उनके मूल्यों की एक सूची मुद्रित करेगी। ये चर उपप्रकारों को दिखाई देते हैं - कई अन्य पर्यावरण चर इसके साथ नहीं दिखाए जाते हैं, और केवल रनिंग शेल के अंदर उपयोग किए जाते हैं, जैसे कॉन्फ़िगरेशन के लिए।


10
मैं पसंद printenv, दोनों के बाद से envऔर setसिर्फ पर्यावरण outputting के अलावा अन्य कार्य हैं।
iglvzx

3
envकेवल उन पर्यावरण चरों की सूची छापेगा जो निर्यात के लिए चिह्नित किए गए हैं। यह सभी वेरिएबल्स को प्रिंट नहीं करेगा।
स्टारफ़िश

4
@ स्टारफ़िश सही है - इसका मतलब है कि यह स्वीकार किया गया उत्तर बहुत गलत था। यह कहने के लिए संपादित कि यह केवल निर्यात किए गए चर सूचीबद्ध कर रहा है।
वोल्कर सीगल

12
compgen -v

प्रिंट चर चर (लेकिन मान नहीं)।

compgen -e

प्रिंट निर्यात किए गए चर यानी जो इस प्रक्रिया से विरासत में मिले हैं (शुरू होता है, लेकिन उनके मूल्य नहीं)।

शेल और एक्सपोर्टेड वेरिएबल्स के बीच अंतर: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?q=1


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