I want to use the latest version of git which I installed via Homebrew, so I needed to change my PATH
variable to ensure OS X uses the Homebrew version instead of the outdated version that ships with OS X and Command Line Tools. This tutorial recommends simply running:
$ export PATH=/usr/local/bin:$PATH
That's what I did and it worked great.
My question is: where did this command modify my PATH
variable? I don't have ~/.bashrc
, ~/.bash_profile
, or ~/.profile
files in my home directory at all, but when I $ echo $PATH
then the PATH
appears correct and when running which git
and git --version
everything appears to point to the right place. I do see the correct paths listed in /etc/paths
but if I add a test path using export
from the command line then the test path does not appear in that file.
Another question: is this a good way to modify my PATH
variable?
Final question: what are the advantages and disadvantages of this method?
Edit: I do see the correct paths listed in /etc/paths
but if I add a test path using $ export PATH=/test:$PATH
then the test path does not appear in /etc/paths/
, but it appears first when I run $ echo $PATH
, however it is lost after rebooting.
Best Answer
On June 3 you posted the following comment
@DavidAnderson So if I understand correctly, running export PATH... from an interactive shell session only affects $PATH for that session and the newly added path is not saved anywhere (and therefore there is no file where the newly added path can be edited). E.g., if I run export PATH=/test:$PATH but I meant to export the /testing_123 dir instead, then my best option is to simply start a new session rather than attempt to locate and edit a file containing the erroneous /test dir (because there is no such file). Correct?
My response to your comment
From the manual page for bash, I have extracted the following.
PATH
is the name of a variable. Normally, this variable has only the export attribute turned on. The export attribute marks a variable for export to subsequent commands via the environment. Theexport
command turns on the export attribute, but in the case of thePATH
variable, the export attribute is already turned on. Therefore, for thePATH
variable, the next four commands are equivalent.As for your comment, you are correct. There is no such file.
In the case of a mistake of the type you mentioned, I do not think starting a new session would be the best option. I would enter the command
and then highlight the output. You can then cut and paste the text as your next command. Before hitting the return key, use the other keys to correct your mistake.
For more information on this subject, see the manual page for bash. Either enter the command
or visit the site: bash - GNU Bourne-Again SHell.
In response to your Edit:
Yes, you are suppose to lose /test in your PATH variable when you reboot. This is why you need to put an
export
command in your~./profile
file.Original answer:
You seem confused when the
~/.bashrc
,~/.bash_profile
, and~/.profile
files execute. Maybe this will help.Here is how I set up my computer. I have three files:
~/.profile
,~/.bashrc
and~/.bashcm
. If you are missing any of these, you can create them.When I start the Terminal application or select "New Window" from "Shell" on the menu bar, an interactive bash login shell is invoked. This shell executes the
~/.profile
script at startup. You can substitute~/.bash_profile
or~/.bash_login
for~./profile
if you wish. If an interactive bash shell that is not a login shell is started, the shell reads and executes commands from~/.bashrc
. The purpose of~/.bashcm
is to provide a common script to be executed by both~/.profile
and~/.bashrc
.Here is an example of a
.profile
fileThe purpose of the echo commands are to illustrate when the scripts are executed. Once you are comfortable, you can either comment out or delete them. The
.profile
file executes.bashcm
script, then modifies the PATH variable and exits. An example.bashcm
file is shown below.Other than the echo commands,
.bashcm
only sets the prompt and an alias. The example.bashrc
file shown below simply executes the.bashcm
script. Again the echo commands are just for illustration purposes.If I start the Terminal application and enter the commands