Strange behaviour for setenv & getenv in OS X Yosemite

1.9k views Asked by At

When I set an environment variable

launchctl setenv FOO test

I can fetch the value by

launchctl getenv FOO

which returns me 'test', but a simple

echo $FOO

doesn't substitute, the result is empty. In same terminal as well as in new terminal.

Background: Yosemite 10.10 doesn't support /etc/launchd.conf anymore for system wide settings, so Setting environment variables via launchd.conf no longer works in OS X Yosemite/El Capitan/macOS Sierra? looks pretty promising, but I need the access to the env vars via $VARNAME, which doesn't work in my case.

1

There are 1 answers

1
ursa On

As I wrote in section Issues / problems here in order your env variables were correctly taken by applications after system reboot you will need:

  • either login twice: login => logout => login
  • or close & re-open applications manually, where env variables should be taken
  • or do NOT use feature "Reopen windows when logging back".

This happens due to Apple denies explicit ordering of loaded services, so env variables are registered in parallel with processing of the "reopen queue".