Right way to add paths to PATH in mojave

I'm not clear how to add permanently paths to the PATH env var. I've found several questions for this each time with a different answers. I created a .bash_profile in my home dir, but each time I reboot I have to manualy export my paths again.

source ~/.bash_profile doesn't even work.

What am I missing?

This is currently my .bash_profile

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
export PATH="/usr/local/opt/openssl/bin:$PATH"
export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Solution 1:

What you've laid out is the proper way to add additional directories to your user's $PATH.

Step 1 - ~/.bash_profile

To start make edits to your ~/.bash_profile adding whatever locations you'd like to have amended to your $PATH.

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
export PATH="/usr/local/opt/openssl/bin:$PATH"
export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"

Step 2 - source ~/.bash_profile

After making the above edits to this file you can either use the source command or the . notation to "reload" and changes made to this file in your current shell's context.

$ . ~/.bash_profile

-or-

$ source ~/.bash_profile

Step 3 - Evaluate changes

After making the edits and sourcing them you can confirm they had the effect you desired by echoing the contents of the $PATH varible.

$ echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
/Applications/Wireshark.app/Contents/MacOS
/usr/local/sbin
/Users/smingolelli/bin
/usr/local/opt/go/libexec/bin
/Applications/Visual Studio Code.app/Contents/Resources/app/bin
/Users/smingolelli/projects/kubebuilder/kubebuilder_1.0.5_darwin_amd64/bin/

The order matters, so directories that occur first will be searched first. If a binary lives in multiple places, the first place encountered will be the one that is used.

Also keep in mind that multiple sourcings of this file will have a negative effect of continuing to add the same changes, so it's often the case that you'll want to completely se the $PATH to a consistent known initial state and then amend it with these types of commands:

export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin"
export PATH="/some/new/dir:$PATH"

Using path_helper

macOS also includes a helper to assistance in the management of your $PATH. It's located here /usr/libexec/path_helper.

So instead of manually crafting your base $PATH as mentioned above you can instead use this snippet to get a known good starting point for your $PATH.

[ -x /usr/libexec/path_helper ] && eval $(/usr/libexec/path_helper -s)

This will take care to initialize $PATH so any directories listed in /etc/paths and /etc/paths.d/ get added automatically.