Где хранятся переменные экспорта терминала в Macos - PullRequest
0 голосов
/ 07 мая 2020

Если я экспортирую переменную в свой терминал, например,

$ export MY_VARIABLE = HelloWorld

где она сохраняется? Могу ли я найти его в файловой системе?

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Я думаю, вы неправильно понимаете, что делает экспорт - он вообще не «сохраняет» переменную, он просто помещает ее в среду процесса оболочки, поэтому она будет унаследована программами, запускаемыми этой оболочкой. Это не влияет на другие запущенные оболочки, программы, запускаемые другими способами, и не является постоянным при выходе из этого конкретного процесса оболочки.

Вот пример. Программа curl будет использовать прокси, указанные в переменных среды, например http_proxy. Предположим, я делаю:

http_proxy=http://proxy.example.net/    # This won't work
curl http://www.example.com/

В этом случае переменная http_proxy определена только в оболочке и не наследуется программой curl, поэтому она не имеет никакого эффекта. С другой стороны, если я запускаю:

export http_proxy=http://proxy.example.net/
curl http://www.example.com/

или

http_proxy=http://proxy.example.net/
export http_proxy
curl http://www.example.com/

... export преобразует http_proxy в переменную среды, так что это будет наследуется командой curl (и другими программами, запускаемыми этой оболочкой), поэтому curl будет использовать этот прокси.

Но это все, что export делает ! Экспортируемая переменная не присутствует вне процесса, в котором она определена, и его подпроцессов. Он не передается «вверх» по дереву процессов процессу, запустившему оболочку, или любым другим оболочкам или независимым процессам, и на самом деле нигде не «сохраняется» (кроме данных процесса в памяти).

Люди иногда спрашивают об установке переменной окружения «навсегда» , но такого нет (по крайней мере, в unix -подобных ОС, включая macOS и Linux). Самое близкое, что вы можете сделать, это добавить команды для установки (и экспорта) переменной в файлы запуска вашей оболочки (возможно, ~/.profile, ~/.bash_profile, ~/.bashrc, ~/.zprofile, ~/.zshrc, и c в зависимости от какую оболочку вы используете). На самом деле это не делает его постоянным, он просто воссоздает его для каждого нового процесса оболочки. (И даже в этом случае он не будет присутствовать в процессах, не являющихся оболочкой, как большинство cron заданий.)

0 голосов
/ 13 мая 2020

Если вы ищете способ перечислить переменные среды, вы можете использовать printenv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...