Как перечислить все имена переменных и их текущие значения?

Как перечислять все имена переменных и их текущие значения?

Включая не только $HOME, $PWD и т. д., но и любые другие, которые вы определили.

1
задан 24 August 2016 в 15:25

6 ответов

Я знаю, что этот вопрос довольно старый и ответил, но я думаю, что могу добавить немного полезной информации.

Во всех описанных выше методах предлагается следующая процедура: [!d1 ] запуск терминала показывает переменные среды с использованием env или printenv или любого другого

. Проблема этих решений заключается в том, что вы видите переменные среды оболочки, которая работает в Терминал. Вы не видите переменные среды, доступные для запуска приложения, например, непосредственно графическим интерфейсом.

Это заметно, если вы, например, используете ваши ~/.profile или .bashrc или .zshenv (в зависимости от вашей оболочки), чтобы изменить переменные среды - например, классическое дополнение каталогов на путь.

Чтобы увидеть переменные среды, доступные для приложения, запущенные непосредственно в графической среде, вы можете сделать следующее (в Gnome Shell, я уверен, что есть эквивалентный метод во всех других DE):

запустите терминал запустите команду xterm -e bash --noprofile --norc

Теперь у вас есть терминал с оболочкой, которая не добавила никаких переменных окружения. Здесь вы можете использовать env для перечисления всех переменных среды:

Очевидно, что новая оболочка будет иметь переменные среды, добавленные системными файлами, но эти переменные должны быть доступны ( по наследованию) для всех программ в системе.

Я публикую это, потому что в четвертый раз мне нужно снова искать этот трюк, проверяя файл .pam_environment. Так что теперь я найду его быстрее (и в процессе, надеюсь, кому-то помогу ...)

42
ответ дан 25 May 2018 в 00:01
  • 1
    Требуется, чтобы у вас была среда рабочего стола, не полезная для серверных CLI-только для людей. – K7AAY 21 October 2013 в 23:21
  • 2
    Да --- но тогда для CLI только предыдущий ответ в порядке. Я просто указывал, что когда-нибудь вам нужно проверить переменные среды, доступные для приложения, запущенного графической средой, которая не является тем же самым набором, который вы видите при запуске в нем терминала. Например, если вы пытаетесь понять, почему приложение Kile не может скомпилировать файл LaTeX, в то время как в терминале вы можете, трюк, который я разместил здесь, поможет много. – Rmano 22 October 2013 в 01:36
  • 3
    Спасибо за очень полезный ответ! Я просто связал его с help.ubuntu.com/community/… – Gunnar Hjalmarsson 2 January 2014 в 23:06
  • 4
    Благодарю. Вы порекомендовали xterm -e bash --noprofile --norc, потому что загрузочные файлы не читаются и не выполняются при запуске Ubuntu с графическим интерфейсом? См. askubuntu.com/q/1025845/1471 – Tim 17 April 2018 в 17:49
  • 5
    @Tim в основном это всего лишь способ иметь оболочку без каких-либо изменений, кроме переменных среды, доступных для графической среды. Стандартный терминал будет читать (или перечитывать) .bashrc, например ... – Rmano 17 April 2018 в 18:06

Вы можете увидеть все переменные с встроенным declare.

declare -p

Если вас интересуют только переменные среды, используйте

declare -xp

Run help declare чтобы увидеть, что другие варианты.

30
ответ дан 25 May 2018 в 00:01
  • 1
    это гораздо более четкое решение, чем POSIXLY_CORRECT=1 set, и также стоит упомянуть, что declare является alias (в этом контексте) для typeset, другой bash builtin. – randomware 7 February 2018 в 20:50

Чтобы перечислить переменные среды в терминале с помощью 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

и т. д.

надеюсь, что это поможет.

11
ответ дан 25 May 2018 в 00:01

В bash с использованием compgen:

compgen -v | while read line; do echo $line=${!line};done  
3
ответ дан 25 May 2018 в 00:01
  • 1
    Это должен быть принятый ответ, так как все остальные перечисляют больше, чем просто имя. В моем случае некоторые переменные содержат многострочные значения, что делает другие решения недоступными. – Mene 9 November 2017 в 19:20

env - это способ POSIX 7:

export asdf=qwer
env | grep asdf

Пример вывода:

asdf=qwer

Он отображает только экспортированные переменные: неэкспортированные переменные обычно не считаются «переменными среды» ".

Предпочитайте, чтобы над printenv, который не является POSIX. Оба, кажется, делают то же самое без аргументов: POSIX 7 way

2
ответ дан 25 May 2018 в 00:01

Если вы хотите использовать определенную переменную окружения, а не печатать их все с помощью printenv, вы можете, например, распечатать ее, выполнив echo "$PWD"

0
ответ дан 25 May 2018 в 00:01

Другие вопросы по тегам:

Похожие вопросы: