Я думаю, вы неправильно понимаете, что делает экспорт - он вообще не «сохраняет» переменную, он просто помещает ее в среду процесса оболочки, поэтому она будет унаследована программами, запускаемыми этой оболочкой. Это не влияет на другие запущенные оболочки, программы, запускаемые другими способами, и не является постоянным при выходе из этого конкретного процесса оболочки.
Вот пример. Программа 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
заданий.)