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

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

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

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

10 ответов

Для удара: (стандартная оболочка в Ubuntu)

Введите следующую команду в терминал для печати всех переменных среды:

printenv

Для получения дополнительной информации об этой команде, читайте printenv страница справочника.


Для показа списка включая "переменные оболочки", можно ввести следующую команду:

( set -o posix ; set ) | less

Это покажет Вам не только переменные оболочки, но и переменные среды также.

Для получения дополнительной информации связанный с этим чтением темы:


Для zsh: (усовершенствованная оболочка)

Используйте следующую команду:

( setopt posixbuiltin; set; ) | less

Для получения дополнительной информации об опциях ZSH, посмотрите zshoptions страница справочника.

485
ответ дан 24 August 2016 в 15:25

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

Во всех методах, описанных выше, процедура, которая предлагается:

  • запускаются, терминал
  • показывают переменные среды с помощью env, или printenv или безотносительно

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

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

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

  • нажимают, Alt-F2
  • выполняет команду xterm -e bash --noprofile --norc

(Или, если Вы не имеете xterm, gnome-terminal -- bash --noprofile --norc---благодаря @Mike Nakis для комментария).

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

Example of the bare shell

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

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

52
ответ дан 24 August 2016 в 15:25

Вы видите все переменные с declare встроенный.

declare -p

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

declare -xp

Выполнение help declare для наблюдения, каковы другие опции.

45
ответ дан 24 August 2016 в 15:25

Перечислять переменные среды в терминале с 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

и т.д.

надежда, которая помогает.

12
ответ дан 24 August 2016 в 15:25

В ударе с помощью compgen:

compgen -v | while read line; do echo $line=${!line};done  
7
ответ дан 24 August 2016 в 15:25

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

3
ответ дан 24 August 2016 в 15:25

printenv только перечисляет экспортируемые переменные, команда + высокий звук + $ ("\e$": полная переменная), перечислит все переменные.

0
ответ дан 14 October 2019 в 15:20

Большинство решений здесь или печатает только переменные среды или имеет недостаток, что ENV или (устанавливает-o posix; posix), не печатают значения в parseable форме (попытайтесь распечатать переменный $ A= 'a\r\nb'...).

Вот функция, которая распечатает все переменные, одна переменная на строку, в POSIX вышла из формы:

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

Благодаря @tmgoblin для указания на использование compgen-v.

4
ответ дан 14 October 2019 в 15:20

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

2
ответ дан 22 November 2019 в 22:35
  • printenv покажет все глобальные переменные среды
  • env, глобальная переменная среды после изменения входа в систему
  • set, покажет все локальные переменные среды относительно сеанса (обычно локальная переменная является глобальной + конкретная сеанса)
0
ответ дан 29 August 2020 в 16:04

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

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