Apple - Setting the system-wide PATH environment variable in Mavericks

Yosemite

/etc/launchd.conf is no longer supported in 10.10. See man launchctl:

The /etc/launchd.conf file is no longer consulted for subcommands to run during early boot time; this functionality was removed for security considerations.

You can now for example save this plist as ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

The launchctl setenv command is ran as the user, so it only applies to processes launched in the user domain.

This method doesn't apply to applications that are reopened at login if "Reopen windows when logging back in" is checked.

Mavericks and earlier

In 10.9 and earlier, you can for example run

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

and then restart to apply the changes.

Other methods

/etc/paths and /etc/paths.d/ apply only (or mainly) to shells. The lines in /etc/paths and /etc/paths.d/* are added to the path by path_helper, which is run from /etc/profile, /etc/zshenv, and /etc/csh.login. I don't know any programs other than shells that would consider /etc/paths or /etc/paths.d/.

~/.MacOSX/environment.plist stopped working in 10.8.


There is a much easier way. Place a text file in the folder /etc/paths.d/. In this text file, enter the desired path AND a newline. The best way is to create a new file for each path.

On my system, there is a file called MySQL with the text '/usr/local/mysql/bin' and a newline.


You may be able to set environment variables in the file /etc/launchd-user.conf...

In Mavericks, I was able to configure an environment variable in the file using the line:

setenv TEST test

After a fresh boot, $TEST from /etc/launchd-user.conf is set.

Edit

It's possible that the syntax of the file at /etc/launchd.conf is invalid. Can you post the contents of that file for examination?

From what I'm seeing, setting the PATH variable in /etc/launchd.conf is working normally. However, launchd does not perform any parameter expansion. Therefore, if you have an entry like setenv PATH $PATH:/usr/local/bin, your resulting path would be set to "$PATH:/usr/local/bin" (note: not the value of PATH, but the text "$PATH")