Macos – How to reset the $PATH variable on Mac OS X

environment-variablesmacospathunix

I've messed up my path variable, and now some apps that I run raise errors saying Command Not Found (error 127) for commands like date and sleep. These commands work fine when executed directly in the shell.

I'm guessing this has something to do with a malformed $PATH variable, and need to know how to reset it. I've deleted the files ~/.bashrc, ~/.bash_profile, /etc/bash.bashrc, and ~/.bashrc and ~/.profile.

What other files could hold my $PATH? Is there some simpler way to reset the Path than dig into the myriad files which could hold my path?

Note, this path problem is only with my user. I made a test user on my system, and the path was fine, back to normal.

UPDATE: Thanks. I dunno which one of the files I deleted did it, but things are working again. You guys did what the 'Experts' couldn't. And yes, Chris, you were right. The PATH customizations I had made were in bash_login. But somehow it worked without me deleting those customizations. I think it might have been coz I was using this prefpane called 'RCEnvironment', and I had entered a path with quotes and :PATH in it. I dunno whether it takes quotes, and it doesn't replace :$PATH, so that probably is the root of the error. I forgot I even had that prefpane!

Best Answer

If you have a ~/.MacOSX/environment.plist file, check it to see if it provides a default PATH value.

If it is in XML format (plists can be in many formats), you can edit with any text editor. Check it with plutil -lint ~/.MacOSX/environment.plist if you edit it by hand.

Or, you can use commands like defaults or PlistBuddy to make controlled modifications to XML or binary format plist files.


You can always set your own PATH in any of your shell's initialization files.

Put something like the following in your of your shell's startup files (.bashrc, or .bash_profile/.bash_login/.profile):

PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH

# add custom, local installations to PATH
PATH=/usr/local/bin:/usr/local/sbin:"$PATH"

# add MacPorts to PATH
PATH=/opt/local/bin:/opt/local/sbin:"$PATH"

That will override whatever default PATH is set when the shell starts (the first PATH= does not use $PATH, so it will always start out with only whatever you give it).

Only one of the ‘login’ files will ever be used (the first one that exists and is readable of ~/.bash_profile, ~/.bash_login, and ~/.profile will be used). .profile is for backwards compatibility with other shells—if you use it, be sure to keep it free of syntax that is specific to bash. If you go with .bash_login or .bash_profile (they are functionally equivalent except for the names), then use a line like [[ -e ~/.bashrc -a -r ~/.bashrc ]] && source ~/.bashrc ]] near the top so that login shells will also get the customizations made in your .bashrc.

If you want all instances of bash to have the same PATH, then use .bashrc. If you often find yourself interactively modifying a single shell's PATH from the command line and want to use that modified PATH in subshells (a cases that is probably not terribly common), then you should put the statements in one of the ‘login’ files instead. Pick only one of the login files and use it.

Related Question