Как перечислить все имена переменных и их текущие значения?
Включая не только $HOME
и $PWD
т. Д., Но и любые другие, которые вы определили.
command-line
bash
environment-variables
Strapakowsky
источник
источник
Ответы:
Для bash: (стандартная оболочка в Ubuntu)
Введите следующую команду в терминале, чтобы напечатать все переменные среды:
Для получения дополнительной информации об этой команде прочитайте справочную
printenv
страницу .Чтобы показать список, включающий «переменные оболочки», вы можете ввести следующую команду:
Это покажет вам не только переменные оболочки, но и переменные среды.
Для получения дополнительной информации, связанной с этой темой, прочитайте:
Для zsh: (расширенная оболочка)
Используйте следующую команду:
Для получения дополнительной информации о параметрах ZSH см.
zshoptions
Справочную страницу .источник
MYNEWVARIABLE=Ubuntu
и выполняю,printenv
он там не отображается. Почему это так, и как появляются эти другие?export MYNEWVARIABLE=Ubuntu
и это будет работать, как вы ожидаете.set
, он также перечисляет созданную вами переменную. Или сделайset | grep myvar
printenv
является внешней командой, поэтому она знает только (и печатает) экспортированные переменные окружения.set
является внутренней командой bash, поэтому она показывает все «переменные оболочки» (неэкспортированные переменные среды), а также экспортируемые переменные среды.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, но это будетunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, и это будетunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. Использование экспорта говорит: «переменная, которую я устанавливаю, должна быть частью среды, которая передается процессам, а не просто переменной в этой оболочке». В третьем примере говорится, что «переменная должна быть частью среды, которая передается в ЭТОТ процесс, а не задерживаться потом».Я знаю, что этот вопрос довольно старый и на него дан ответ, но я думаю, что могу добавить немного полезной информации.
Во всех описанных выше методах предлагается следующая процедура:
env
илиprintenv
или любой другойПроблема этих решений в том, что вы видите переменные среды оболочки, которая работает в терминале . Вы не видите переменные среды, доступные для запуска приложения, например, непосредственно через графический интерфейс.
Это заметно, если, например, вы используете ваш
~/.profile
, или.bashrc
, или.zshenv
(в зависимости от вашей оболочки) для изменения переменных среды - как при классическом добавлении каталогов к пути.Чтобы увидеть переменные среды, доступные приложению, запущенному непосредственно в графической среде, вы можете сделать следующее (в Gnome Shell я уверен, что во всех остальных DE есть эквивалентный метод):
xterm -e bash --noprofile --norc
(Или, если у вас нет
xterm
,gnome-terminal -- bash --noprofile --norc
--- спасибо @Mike Nakis за комментарий).Теперь у вас есть терминал с оболочкой, который не добавляет никаких переменных среды. Вы можете использовать
env
здесь, чтобы перечислить все ваши переменные среды:Очевидно, что новая оболочка будет иметь переменные среды, добавленные системными файлами, но эти переменные должны быть доступны (по наследству) для всех программ в системе в любом случае.
Я публикую это, потому что уже четвертый раз мне приходится снова искать этот трюк, проверяя мои
.pam_environment
файлы. Так что теперь я найду это быстрее (и в процессе, я надеюсь помочь кому-то еще ...)источник
xterm -e bash --noprofile --norc
потому что файлы запуска не читаются и не запускаются при запуске Ubuntu с графическим интерфейсом? См. Askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Вы можете увидеть все переменные с помощью
declare
встроенного.Если вас интересуют только переменные окружения, используйте
Запустите,
help declare
чтобы увидеть другие варианты.источник
POSIXLY_CORRECT=1 set
и это также стоит упомянуть , чтоdeclare
естьalias
(в этом контексте) дляtypeset
, других Баша встроенных команд.Чтобы вывести список переменных среды в терминале с CTRL+ ALT+, Tвы можете использовать
env
команду.например :
и т.п.
надеюсь, это поможет.
источник
В bash с использованием compgen:
источник
compgen -v | while read line; do declare -p $line; done
Большинство решений здесь либо печатают только переменные окружения, либо имеют недостаток, заключающийся в том, что env или (set -o posix; posix) не печатают значения в разбираемой форме (попробуйте вывести переменную A = $ 'a \ r \ nb' ...) ,
Вот функция, которая будет печатать все переменные, по одной переменной на строку, в экранированной форме POSIX:
Спасибо @tmgoblin за указание на использование compgen -v.
источник
env - это способ POSIX 7 :
Образец вывода:
Он показывает только экспортированные переменные: неэкспортированные переменные обычно не считаются «переменными среды».
Предпочитаю это
printenv
, а не POSIX. Кажется, что оба делают одно и то же без аргументов: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenvисточник
env
более заметным благодаря лучшему форматированию, и я добавил больше информации.Если вам нужна определенная переменная среды, а не печатать их все вместе
printenv
, вы можете, например, распечатать ее, выполнивecho "$PWD"
источник
printenv только перечисляет экспортированные переменные, command+ alt+ $ ("\ e $": complete-variable) перечислит все переменные.
источник