Как составить список всех имен переменных и их текущих значений?
Включая не только $HOME
, $PWD
и т. Д., Но и любые другие, которые вы определили.
Для удара: (стандартная оболочка в Ubuntu)
Введите следующую команду в терминал для печати всех переменных среды:
printenv
Для получения дополнительной информации об этой команде, читайте printenv
страница справочника.
Для показа списка включая "переменные оболочки", можно ввести следующую команду:
( set -o posix ; set ) | less
Это покажет Вам не только переменные оболочки, но и переменные среды также.
Для получения дополнительной информации связанный с этим чтением темы:
Для zsh: (усовершенствованная оболочка)
Используйте следующую команду:
( setopt posixbuiltin; set; ) | less
Для получения дополнительной информации об опциях ZSH, посмотрите zshoptions
страница справочника.
Я знаю, что этот вопрос довольно стар и отвечен, но я думаю, что могу добавить немного полезной информации.
Во всех методах, описанных выше, процедура, которая предлагается:
env
, или printenv
или безотносительно , проблема этих решений состоит в том, что Вы видите переменные среды из оболочки, которая сталкивается с терминалом . Вы не видите переменных среды, доступных выполнению приложения, например, непосредственно графическим интерфейсом.
Это примечательно, например, при использовании Вашего ~/.profile
, или .bashrc
, или .zshenv
(в зависимости от оболочки) для изменения переменных среды---как классическое добавление каталогов к пути.
Для наблюдения переменных среды, доступных приложению, запущенному непосредственно в графической среде, можно сделать следующее (в Gnome Shell, я уверен, что существует эквивалентный метод во всех других DE):
xterm -e bash --noprofile --norc
(Или, если Вы не имеете xterm
, gnome-terminal -- bash --noprofile --norc
---благодаря @Mike Nakis для комментария).
у Вас теперь есть терминал с оболочкой, которая не добавила переменных среды. Можно использовать env
здесь для списка всех переменных среды:
, Очевидно, новой оболочке добавят переменные среды системные файлы, но это переменные должно быть доступно (наследованием) ко всем программам в системе так или иначе.
я отправляю это, потому что это - четвертый раз, когда я должен искать этот прием снова, проверяя мой .pam_environment
файл. Таким образом, теперь я найду его быстрее (и в процессе, я надеюсь, помогая кому-то еще...)
Вы видите все переменные с declare
встроенный.
declare -p
, Если Вы только интересуетесь переменными среды, используйте
declare -xp
Выполнение help declare
для наблюдения, каковы другие опции.
Перечислять переменные среды в терминале с 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
и т.д.
надежда, которая помогает.
В ударе с помощью compgen:
compgen -v | while read line; do echo $line=${!line};done
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
printenv только перечисляет экспортируемые переменные, команда + высокий звук + $ ("\e$": полная переменная), перечислит все переменные.
Большинство решений здесь или печатает только переменные среды или имеет недостаток, что 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.
Если Вы хотите определенную переменную среды, вместо того, чтобы печатать их всех с printenv
, можно, например, распечатать его путем выполнения echo "$PWD"
printenv
покажет все глобальные переменные среды