लिनक्स बैश टर्मिनल में, अक्सर कई पर्यावरण चर होते हैं जिन्हें सेट किया गया है, जैसे $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वास्तव में मैं क्या चाहता था!