सभी चर नामों और उनके वर्तमान मूल्यों को कैसे सूचीबद्ध किया जाए?


348

सभी चर नामों और उनके वर्तमान मूल्यों को कैसे सूचीबद्ध किया जाए?

जिसमें न केवल आदि $HOME, $PWDबल्कि आपके द्वारा परिभाषित किसी भी अन्य को शामिल किया गया है।



आपने गलत उत्तर स्वीकार कर लिया है। "प्रिंटेनव" केवल आपको पर्यावरण चर देता है। यदि आप वास्तव में अपने शेल में वर्तमान में घोषित सभी चर चाहते हैं, तो "घोषित-पी" या "टाइपसेट-पी" का उपयोग करें।
फ्लोरिन आंद्रेई

जवाबों:


479

बश के लिए: (उबंटू में मानक शेल)

सभी पर्यावरण चर को मुद्रित करने के लिए टर्मिनल में निम्न कमांड दर्ज करें:

printenv

इस आदेश के बारे में अधिक जानकारी के लिए, printenvमैन पेज पढ़ें ।


"शेल चरों" सहित एक सूची दिखाने के लिए आप अगले कमांड में प्रवेश कर सकते हैं:

( set -o posix ; set ) | less

यह आपको न केवल शेल वेरिएबल्स दिखाएगा , बल्कि पर्यावरण चर भी।

इस विषय से संबंधित अधिक जानकारी के लिए पढ़ें:


Zsh के लिए: एक उन्नत शेल)

निम्नलिखित आदेश का उपयोग करें:

( setopt posixbuiltin; set; ) | less

ZSH विकल्पों के बारे में अधिक जानकारी के लिए, zshoptionsमैन पेज देखें ।


14
यदि मैं टर्मिनल पर जाता हूं और लिखता हूं MYNEWVARIABLE=Ubuntuऔर निष्पादित printenvकरता हूं तो यह वहां नहीं दिखता है। ऐसा क्यों है, और वे अन्य लोग कैसे दिखाते हैं?
स्ट्रैपकोव्स्की

4
संभवतः आप शेल चर और पर्यावरण चर के बीच अंतर देख रहे हैं। कोशिश करें export MYNEWVARIABLE=Ubuntuऔर यह आपकी अपेक्षा के अनुरूप काम करेगा।
रमनो

3
यदि आप बस निष्पादित करते हैं set, तो यह आपके द्वारा बनाए गए चर को भी सूचीबद्ध करता है। या करते हैंset | grep myvar
सर्जियो कोलोडियाज़नी

4
printenvएक बाहरी कमांड है, इसलिए यह केवल (और प्रिंट) निर्यात किए गए पर्यावरण चर के बारे में जानता है। setएक आंतरिक बैश कमांड है, इसलिए यह सभी "शेल वेरिएबल्स" (अनएक्सपोर्टेड एनवायरनमेंट वेरिएबल्स) के साथ-साथ एक्सपोर्टेड एनवायरनमेंट वेरिएबल्स को दिखाता है।
दान प्रिट्स

1
@ Rmano के @Strapakowsky के जवाब पर विस्तार करने के लिए ... यह काम नहीं करेगा unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, लेकिन यह होगा unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, और यह होगा unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW। निर्यात का उपयोग करते हुए कहते हैं, "मैं जो चर स्थापित कर रहा हूं वह पर्यावरण का हिस्सा होना चाहिए जो प्रक्रियाओं में पारित हो जाता है, न कि केवल इस शेल में एक चर।" मेरा तीसरा उदाहरण कहता है "चर उस पर्यावरण का हिस्सा होना चाहिए जो THIS प्रक्रिया में पास हो जाता है, लेकिन बाद में आसपास नहीं रहता।"
ब्रूनो ब्रोंस्की

52

मुझे पता है कि यह प्रश्न काफी पुराना है और इसका उत्तर दिया गया है, लेकिन मुझे लगता है कि मैं इसमें कुछ उपयोगी जानकारी जोड़ सकता हूं।

ऊपर वर्णित सभी विधियों में, जिस प्रक्रिया का सुझाव दिया गया है वह है:

  • एक टर्मिनल लॉन्च करें
  • पर्यावरण चर का उपयोग कर env, printenvया जो कुछ भी दिखा

इन समाधानों की समस्या यह है कि आप शेल के पर्यावरण चर को देख रहे हैं जो टर्मिनल में चल रहा है । आप पर्यावरण चर को एप्लिकेशन चलाने के लिए उपलब्ध नहीं देख रहे हैं, उदाहरण के लिए, सीधे ग्राफिक इंटरफ़ेस द्वारा।

यह ध्यान देने योग्य है अगर, उदाहरण के लिए, आप पर्यावरण चर को संशोधित करने के लिए अपने ~/.profile, या .bashrc, .zshenv(आपके शेल के आधार पर) का उपयोग करते हैं --- पथ के लिए निर्देशिकाओं के क्लासिक जोड़ की तरह।

ग्राफिक परिवेश में सीधे शुरू किए गए एप्लिकेशन के लिए उपलब्ध पर्यावरण चर को देखने के लिए, आप निम्न कार्य कर सकते हैं (गनोम शेल में, मुझे यकीन है कि अन्य सभी डीई में एक समान विधि है):

  • Alt-F2 दबाएं
  • कमांड चलाएं xterm -e bash --noprofile --norc

(या, यदि आपके पास नहीं है xterm, तो gnome-terminal -- bash --noprofile --norc--- टिप्पणी के लिए @Mike Nakis का धन्यवाद)।

अब आपके पास एक शेल वाला एक टर्मिनल है जो किसी भी पर्यावरण चर को नहीं जोड़ता है। आप envअपने सभी पर्यावरण चर को सूचीबद्ध करने के लिए यहां उपयोग कर सकते हैं :

नंगे खोल का उदाहरण

स्पष्ट रूप से नए शेल में सिस्टम फ़ाइलों द्वारा जोड़े गए पर्यावरण चर होंगे, लेकिन वे चर वैसे भी सिस्टम में सभी कार्यक्रमों के लिए (विरासत द्वारा) उपलब्ध होने चाहिए।

मैं इसे पोस्ट कर रहा हूं क्योंकि यह चौथी बार है जब मुझे इस ट्रिक को फिर से खोजना है, मेरी .pam_environmentफ़ाइल की जाँच करना । इसलिए अब मैं इसे और तेजी से खोजूंगा (और इस प्रक्रिया में, मुझे आशा है कि किसी और की मदद कर ...)


आपको एक डेस्कटॉप वातावरण की आवश्यकता है, सर्वर CLI- केवल लोक के लिए उपयोगी नहीं है।
K7AAY

5
हां --- लेकिन फिर CLI के लिए केवल पिछला उत्तर ही ठीक है। मैं केवल यह इंगित कर रहा था कि कभी-कभी आपको ग्राफिकल वातावरण द्वारा शुरू किए गए एप्लिकेशन के लिए उपलब्ध पर्यावरण चर की जांच करने की आवश्यकता होती है, जो आपके द्वारा इसमें टर्मिनल शुरू करने पर आपके द्वारा देखे जाने वाले सेट के समान नहीं है। उदाहरण के लिए, यदि आप यह समझने की कोशिश कर रहे हैं कि आपका किएल ऐप एक एलईटीएक्स फ़ाइल को संकलित क्यों नहीं कर सकता है, जबकि एक टर्मिनल में आप कर सकते हैं, तो मैंने यहाँ जो ट्रिक पोस्ट की है वह बहुत मदद करेगी।
रमानो

3
बहुत उपयोगी उत्तर के लिए धन्यवाद! मैं सिर्फ help.ubuntu.com/community/…
गुन्नार

धन्यवाद। क्या आपने सिफारिश की थी xterm -e bash --noprofile --norcक्योंकि उबंटू को ग्राफिकल इंटरफेस के साथ शुरू करने पर स्टार्टअप फाइलें पढ़ी और निष्पादित नहीं की जाती हैं? देखें askubuntu.com/q/1025845/1471
टिम

1
आजकल निष्पादित करने का सही आदेश (Ubuntu 18.04) हैgnome-terminal -- bash --noprofile --norc
माइक नाकिस

45

आप declareबिलिन के साथ सभी चर देख सकते हैं ।

declare -p

यदि आप केवल पर्यावरण चर में रुचि रखते हैं, तो उपयोग करें

declare -xp

help declareअन्य विकल्प क्या हैं, यह देखने के लिए चलाएँ ।


यह तुलना में कहीं अधिक साफ-सुथरा समाधान है POSIXLY_CORRECT=1 setऔर यह उल्लेख के योग्य भी declareहै alias(उस संदर्भ में) typeset, एक और बैश बिलिन।

1
यह सही जवाब है।
फ्लोरिन आंद्रेई

12

साथ टर्मिनल में वातावरण चर को सूचीबद्ध करने के CTRL+ ALT+ Tआप उपयोग कर सकते हैं envआदेश।

उदाहरण के लिए :

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

आदि।

उम्मीद है की वो मदद करदे।


मैंने देखा है कि env कुछ चर o_O को याद करता है। विशेष रूप से एक वैर = वैल फाइल सोर्स करने के बाद।
थोरसुमोनर

1
@ थोरसुमोनर यहाँ जवाब stackoverflow.com/questions/15474650/…
georaldc

7

कॉम्पैन का उपयोग करते हुए बैश में:

compgen -v | while read line; do echo $line=${!line};done  

2
यह स्वीकृत उत्तर होना चाहिए, क्योंकि अन्य सभी केवल नाम से अधिक सूचीबद्ध हैं। मेरे मामले में कुछ चर में बहुस्तरीय मूल्य होते हैं जो अन्य समाधानों को संभव नहीं बनाता है।
मेने

1
एक प्रकार:compgen -v | while read line; do declare -p $line; done

4

यहां अधिकांश समाधान या तो केवल पर्यावरण चर को प्रिंट करते हैं, या इसमें दोष है कि env या (-o पॉज़िक्स; पॉज़िक्स) पार्स करने योग्य रूप में मान प्रिंट नहीं करते हैं (चर ए = $ 'a \ r \ nb' मुद्रित करने का प्रयास करें ...) ।

यहाँ एक फ़ंक्शन है जो POSIX से बचते हुए फॉर्म में सभी चर, एक चर प्रति पंक्ति को प्रिंट करेगा:

function dump_vars {
    local VARNAME
    compgen -v | while read -r VARNAME; do
        printf "$VARNAME=%q\n" "${!VARNAME}"
    done
}

Compgen -v के उपयोग को इंगित करने के लिए @tmgoblin का धन्यवाद।


1
बहुत बढ़िया पहला जवाब! +1 अच्छा काम जारी रखें!
फाबबी

3

env एक POSIX 7 तरीका है :

export asdf=qwer
env | grep asdf

नमूना उत्पादन:

asdf=qwer

यह केवल निर्यात किए गए चर दिखाता है: गैर-निर्यात किए गए चर को आमतौर पर "पर्यावरण चर" नहीं माना जाता है।

उस ओवर को प्राथमिकता दें printenv, जो POSIX नहीं है। दोनों बिना तर्क के एक ही काम करते दिखते हैं: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


पहले से ही दो साल पहले उल्लेख किया गया है: askubuntu.com/a/276162/158442
muru

@ मुरू मेला काफी। काश यह envबेहतर प्रारूपण के साथ अधिक दृश्यमान होता, और मैंने अधिक जानकारी जोड़ी।
सिरो सांटिल्ली 新疆 iro i i 事件 '30

यही संपादन के लिए है।
मूरू

2

यदि आप एक विशिष्ट पर्यावरण चर चाहते हैं, तो उन सभी को मुद्रित करने के बजाय printenv, आप उदाहरण के लिए ऐसा करके प्रिंट कर सकते हैंecho "$PWD"


0

Printenv केवल निर्यात किए गए चर को सूचीबद्ध करता है, command+ alt+ $ ("\ e $": पूर्ण-चर) सभी चर को सूचीबद्ध करेगा।

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