Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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!

share|improve this question
    
/etc/profile is the most likely place for settings initial values for PATH, but something there it would affect all users. There is also ~/.bash_login, which you did not list (though you may have already eliminated it). –  Chris Johnsen Mar 19 '10 at 20:43

2 Answers 2

up vote 10 down vote accepted

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.

share|improve this answer

Chris Johnson's rc/profile edits shown also work fine in /etc/profile.

I just appended:

export PATH="/usr/local/mariadb/bin:$PATH"

to my /etc/profile file in Mac OS X 10.9 Mavericks to complete the MariaDB install (which works as a great drop-in replacement for MySQL).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.