6

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"
  • What do you mean with "source ~/.bash_profile doesn't even work"? Do you get an error mesage? – nohillside Apr 25 '19 at 18:04
  • Quit Terminal, then reopen it... what's the result of: echo $PATH – user3439894 Apr 25 '19 at 18:04
  • @user3439894 yeah that's strange, actually the paths are all here, first row excluded (the python one) – alfredopacino Apr 25 '19 at 18:10
  • I was expecting you to post the the result of echo $PATH so I could see explicitly and specifically what the result was. Sorry, but I can't help if I'm not given the info I request! – user3439894 Apr 25 '19 at 18:14
  • /Applications/XAMPP/xamppfiles/bin:/usr/local/opt/openssl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin – alfredopacino Apr 25 '19 at 18:17
9

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.

|improve this answer|||||
  • It might be better to use [ -x /usr/libexec/path_helper ] && eval $(/usr/libexec/path_helper -s) to initialize the path so any directories listed in /etc/paths and /etc/paths.d/ get added automatically. – nohillside Apr 28 '19 at 13:46
  • @nohillside makes sense. I wasn't aware that macOS had this helper, thanks, I'll add to A'er. – slm Apr 28 '19 at 13:48
  • 1
    Have a look at /etc/profile. It's not much going on there, but initialising PATH is part of it. – nohillside Apr 28 '19 at 13:52
  • Just a head's up, my ~./bash_profile just routes to ~/.bashrc which is the actual file I had to modify. – EHorodyski Sep 24 '19 at 13:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .