लिनक्स बैश टर्मिनल में, अक्सर कई पर्यावरण चर होते हैं जिन्हें सेट किया गया है, जैसे $PATH
और $HOME
।
क्या यह संभव है कि सभी पर्यावरण चर जो स्थापित किए गए हैं? कैसे?
लिनक्स बैश टर्मिनल में, अक्सर कई पर्यावरण चर होते हैं जिन्हें सेट किया गया है, जैसे $PATH
और $HOME
।
क्या यह संभव है कि सभी पर्यावरण चर जो स्थापित किए गए हैं? कैसे?
जवाबों:
टीएल; डीआर: उपयोग(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
नहीं करता है।
env
बिना तर्क वाली कमान "निर्यात" पर्यावरण चर और उनके मूल्यों की एक सूची मुद्रित करेगी। ये चर उपप्रकारों को दिखाई देते हैं - कई अन्य पर्यावरण चर इसके साथ नहीं दिखाए जाते हैं, और केवल रनिंग शेल के अंदर उपयोग किए जाते हैं, जैसे कॉन्फ़िगरेशन के लिए।
printenv
, दोनों के बाद से env
और set
सिर्फ पर्यावरण outputting के अलावा अन्य कार्य हैं।
env
केवल उन पर्यावरण चरों की सूची छापेगा जो निर्यात के लिए चिह्नित किए गए हैं। यह सभी वेरिएबल्स को प्रिंट नहीं करेगा।
compgen -v
प्रिंट चर चर (लेकिन मान नहीं)।
compgen -e
प्रिंट निर्यात किए गए चर यानी जो इस प्रक्रिया से विरासत में मिले हैं (शुरू होता है, लेकिन उनके मूल्य नहीं)।
शेल और एक्सपोर्टेड वेरिएबल्स के बीच अंतर: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?q=1
compgen -e
वास्तव में मैं क्या चाहता था!