ZSH: Где разместить переменную среды, чтобы запущенное приложение могло ее забрать?
Мне нужна переменная окружения KEY="value" сделать доступным для приложения с графическим интерфейсом перед его запуском. Файл запуска (тот, который размещает значок на рабочем столе и боковой панели в Ubuntu) имеет значение Exec=/path/to/executable/file,
При использовании ZSH, где я должен определить эту переменную так, чтобы она была доступна для этого приложения, независимо от того, щелкаю ли я на панели запуска приложений или непосредственно в своей оболочке набираю /path/to/executetable/file?
В командной строке я попытался ввести оба KEY="value" а также export KEY="value" до нажатия на лаунчер, но, похоже, это не сработало. Я также попробовал обе эти строки в моем ~/.zshrc, сделал source ~/.zshrc затем снова щелкнул лаунчер, но это тоже не сработало.
В какой файл он должен войти? Я считаю, что есть выбор ~/.zshenv, ~/.zprofile, ~/.zshrc, а также ~/.zlogin,
(Для бонусных баллов, я должен использовать export или нет?)
(Должен ли я по крайней мере выйти из системы и снова войти в нее, прежде чем переменная станет доступной приложению при запуске из модуля запуска?)
2 ответа
Поскольку вы хотите, чтобы переменная была также определена в оболочках вашего терминала (интерактивная оболочка без входа в систему) и для значков средства запуска на рабочем столе (X-сервер запущен неинтерактивной оболочкой входа в систему), вы должны поместить это определение в свой файл. ~/.zshenv,
И да, вам нужно перезапустить x-session, чтобы новая среда была доступна для ваших значков на рабочем столе. Представьте себе такую схему запуска: Graphical Login -> Use your default shell to start the X session -> Desktop -> Shell terminal / Launch program via icon таким образом, дочерние оболочки наследуют среду от родительской, которая используется для запуска сеанса X. Эта оболочка читает RC-файлы только один раз - при входе в X сессию.
За бонусный балл. Вот что говорится в руководстве:
export [ name[=value] ... ]Указанные имена помечаются для автоматического экспорта в среду последующих выполненных команд. (...)
Если вы определите свою переменную в ~/.zshenv Вы можете в принципе опустить export так как этот файл читается по умолчанию. Единственная разница возникает, если вы запускаете оболочку с zsh -f, который не содержит никаких RC файлов. Небольшая демонстрация:
% foo=foo_defined
% export bar=bar_defined
% print -l $foo $bar
foo_defined
bar_defined
% zsh -f
% print -l $foo $bar
bar_defined
%
И. е. только экспортируется $bar определяется в последующих оболочках. Но чтобы быть в безопасности, используйте export - Я не могу вспомнить случай, когда это вредно.
Я не верю, что @mpy правильно, что вы можете опустить оператор экспорта. Наличие / отсутствие экспорта определяет, будут ли процессы, запущенные из этой оболочки, наследовать переменную среды. Если вы не экспортируете, xserver не наследует переменную окружения
imalison ~ ABCD='14'
imalison ~ python -c "import os; print os.environ.get('ABCD')"
None
imalison ~ export ABCD='14'
imalison ~ python -c "import os; print os.environ.get('ABCD')"
14