سؤال كيفية سرد جميع أسماء المتغيرات والقيم الحالية الخاصة بهم؟


كيفية سرد جميع أسماء المتغيرات والقيم الحالية الخاصة بهم؟

بما في ذلك ليس فقط $HOME، $PWD وغيرها ، ولكن أي دولة أخرى قمت بتعريفها.


295
2018-03-30 00:36


الأصل


superuser.com/questions/420295/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


الأجوبة:


أدخل الأمر التالي في وحدة طرفية لطباعة جميع متغيرات البيئة:

printenv

لمزيد من المعلومات حول هذا الأمر ، اقرأ printenv صفحة رجل.


لإظهار قائمة تتضمن "متغيرات shell" ، يمكنك إدخال الأمر التالي:

( set -o posix ; set ) | less

هذا سوف تظهر لك ليس فقط المتغيرات قذيفة ، ولكن المتغيرات البيئة أيضا.

لمزيد من المعلومات المتعلقة بهذا الموضوع ، يرجى قراءة:


417
2018-03-30 01:21



إذا ذهبت إلى المحطة واكتب MYNEWVARIABLE=Ubuntu وتنفيذها printenv لا تظهر هناك. لماذا هذا ، وكيف يظهر الآخرون؟ - Strapakowsky
ربما كنت ترى الفرق بين متغير shell ومتغير بيئة. محاولة export MYNEWVARIABLE=Ubuntu وستعمل كما تتوقع. - Rmano
إذا كنت ببساطة تنفيذ set، يسرد المتغير الذي أنشأته كذلك. أو افعل set | grep myvar - Sergiy Kolodyazhnyy
printenv هو أمر خارجي ، لذلك فهو لا يعرف سوى (و يطبع) متغيرات البيئة المصدرة. set هو أمر bash داخلي ، بحيث يعرض جميع "متغيرات shell" (متغيرات البيئة غير المُصدرة) بالإضافة إلى متغيرات البيئة المصدرة. - Dan Pritts
للتوسع في الرد على @ RmanoStrapakowsky ... هذا لن ينجح unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWولكن هذا سوف unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWوهذا سوف unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. يقول استخدام التصدير أن "المتغير الذي أقوم به يجب أن يكون جزءًا من البيئة التي يتم تمريرها إلى العمليات ، وليس مجرد متغير في هذه الحالة." يقول المثال الثالث "يجب أن يكون المتغير جزءًا من البيئة التي يتم تمريرها إلى هذه العملية ، ولكن لا تلتزم بعد ذلك." - Bruno Bronosky


أعلم أن هذا السؤال قديم جدًا وأجيب عليه ، ولكن أعتقد أنه يمكنني إضافة بعض المعلومات المفيدة.

في كافة الطرق الموضحة أعلاه ، يكون الإجراء المقترح:

  • إطلاق محطة
  • اظهار متغيرات البيئة باستخدام envأو printenv أو أيا كان

مشكلة هذه الحلول هي أنك ترى متغيرات البيئة من قذيفة التي تعمل في المحطة. أنت لا ترى متغيرات البيئة المتاحة لتشغيل التطبيق ، على سبيل المثال ، مباشرة من خلال واجهة الرسوم.

هذا هو ملحوظ إذا ، على سبيل المثال ، يمكنك استخدام الخاص بك ~/.profileأو .bashrcأو .zshenv (اعتمادا على صدفة الخاص بك) لتعديل متغيرات البيئة --- مثل الإضافة الكلاسيكية من الدلائل إلى المسار.

لرؤية متغيرات البيئة المتاحة للتطبيق بدأت مباشرة في بيئة الرسوم البيانية ، يمكنك القيام بما يلي (في Gnome Shell ، أنا متأكد من أن هناك طريقة مكافئة في كل DE الأخرى):

  • اضغط على Alt-F2
  • قم بتشغيل الأمر xterm -e bash --noprofile --norc

لديك الآن محطة مع shell لا يضيف أي متغيرات البيئة. يمكنك استخدام env هنا لسرد جميع متغيرات البيئة الخاصة بك:

Example of the bare shell

من الواضح أن القشرة الجديدة ستحتوي على متغيرات البيئة التي تضيفها ملفات النظام ، لكن المتغيرات يجب أن تكون متوفرة (بالوراثة) لجميع البرامج في النظام على أي حال.

أنا نشر هذا لأنها المرة الرابعة التي يجب أن أقوم بالبحث في هذه الخدعة مرة أخرى ، والتحقق من بلدي .pam_environment ملف. والآن سأجده أسرع (وفي هذه العملية ، آمل مساعدة شخص آخر ...)


43
2017-10-12 00:37



يتطلب وجود بيئة سطح مكتب ، وليس مفيدًا لخادم CLI فقط. - K7AAY
نعم --- ولكن بعد ذلك ل CLI فقط الإجابة السابقة على ما يرام. كنت فقط أشرت إلى أنه في وقت ما تحتاج إلى التحقق من متغيرات البيئة المتاحة للتطبيق التي بدأتها البيئة الرسومية ، والتي ليست هي نفس المجموعة التي تراها عند بدء محطة طرفية فيه. على سبيل المثال ، إذا كنت تحاول فهم لماذا لا يستطيع تطبيق Kile الخاص بك تجميع ملف LaTeX ، في حين أنه في محطة يمكنك ، فإن الخدعة التي نشرتها هنا ستساعد كثيرًا. - Rmano
شكرا على إجابة مفيدة جدا! أنا فقط مرتبطة بها من help.ubuntu.com/community/... - Gunnar Hjalmarsson
شكر. هل اقترحت xterm -e bash --noprofile --norc لأنه لا تتم قراءة ملفات بدء التشغيل وتنفيذها عند بدء تشغيل Ubuntu مع واجهة رسومية؟ نرى askubuntu.com/q/1025845/1471 - Tim
@ تيم أساسا أنها مجرد وسيلة للحصول على قذيفة دون أي شيء أكثر من متغيرات البيئة المتاحة لبيئة الرسوم البيانية. سوف تقرأ محطة قياسية (أو إعادة قراءة) .bashrc فمثلا... - Rmano


تستطيع أن ترى كل المتغيرات مع declare مدمج.

declare -p

إذا كنت مهتمًا فقط بمتغيرات البيئة ، فاستخدمها

declare -xp

يركض help declare لمعرفة ما هي الخيارات الأخرى.


32
2018-04-04 20:28



هذا هو حل أنيق بعيد المنال من POSIXLY_CORRECT=1 set وهو أيضا جدير بالذكر ذلك declare هو alias (في هذا السياق) ل typesetباش آخر مدمج. - w17t


لسرد متغيرات البيئة في المحطة مع CTRL+ALT+تي يمكنك استخدام 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

إلخ

امل ان يساعد.


11
2018-03-30 16:41



لقد لاحظت أن env يفتقد بعض المتغيرات o_O. تحديدًا بعد تحديد مصدر VAR = VAL. - ThorSummoner
ThorSummoner قد تساعد الإجابة هنا stackoverflow.com/questions/15474650/... - georaldc


في باش باستخدام compgen:

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

3
2018-04-11 20:53



يجب أن يكون هذا هو الجواب المقبول ، حيث أن جميع الآخرين يدرجون أكثر من مجرد الاسم نفسه. في حالتي تحتوي بعض المتغيرات على قيم متعددة مما يجعل الحلول الأخرى غير قابلة للتنفيذ. - Mene


الحياة الفطرية هو POSIX 7 way:

export asdf=qwer
env | grep asdf

إخراج العينة:

asdf=qwer

لا تظهر سوى المتغيرات المصدرة: لا تعتبر المتغيرات غير المصدرة عادةً "متغيرات البيئة".

تفضل ذلك printenv، وهي ليست POSIX. يبدو أن كلاهما يفعل نفس الشيء بدون حجج: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


2
2017-11-30 14:31



سبق ذكرها منذ عامين: askubuntu.com/a/276162/158442 - muru
muru عادلة بما فيه الكفاية. أتمنى لو أنها قدمت env أكثر وضوحا مع تنسيق أفضل ، ولقد قمت بإضافة المزيد من المعلومات. - Ciro Santilli 新疆改造中心 六四事件 法轮功
وهذا ما التحرير هو ل. - muru


إذا كنت تريد متغير بيئة محدد ، بدلاً من طباعتها كلها printenv، يمكنك على سبيل المثال طباعتها عن طريق العمل echo "$PWD"


0
2018-01-08 14:13