Meaning of `export PATH=…` in .bash_profile
The PATH
before =
is a variable name and the combination tells bash
to store the stuff behind the =
in the variable.
The $PATH
is the value of the variable PATH up until then.
The combination PATH="some_path_to_stuff:$PATH"
extends the PATH variable. In bash
this is a colon (:
) separated list.
Regarding the double addition of /usr/local/bin
, I can only guess that the second version has no newline after it (and is at the end of the file). In principle this should give you a PATH which starts with /usr/local/bin:/usr/local/bin:....
. You can check that with
echo $PATH
And if there is only one time /usr/local/bin
then do:
echo "" >> ~/.bash_profile
and login an try to print $PATH
again.
Related videos on Youtube
Shoeb
Updated on September 18, 2022Comments
-
Shoeb over 1 year
I'm using a mac for some years now and as I'm currently learning ruby on rails, I felt like I should learn more about the system I'm using. I took a look at the
~/.bash_profile
, it looks like thisPATH="/Users/nikolajandersen/.apportable/SDK/bin:$PATH" [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM$ # Setting PATH for Python 3.3 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/3.3/bin:${PATH}" export PATH export PATH=/usr/local/bin:$PATH export PATH=/usr/local/bin:$PATH
As there are two identical
export PATH=/usr/local/bin:$PATH
lines, I tried to delete the one. As a result, commands like nano and ls didn't work anymore. I reverted the change but I don't understand why it has to stated two times.Another question is: why does it sometimes $PATH and sometimes just PATH without the $? Why does
-s "$HOME/.rvm/scripts/rvm"
stand in [[ ]] braces? And what doesexport PATH
do?Update This is the output of
echo $PATH
/usr/local/bin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.3/bin:/Users/nikolajandersen/.rvm/gems/ruby-2.0.0-p353/bin:/Users/nikolajandersen/.rvm/gems/ruby-2.0.0-p353@global/bin:/Users/nikolajandersen/.rvm/rubies/ruby-2.0.0-p353/bin:/Users/nikolajandersen/.rvm/bin:/Users/nikolajandersen/.apportable/SDK/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/sm/bin:/opt/sm/pkg/active/bin:/opt/sm/pkg/active/sbin
It seems like you were right with the newline. I deleted the line again and made sure that there is a blank line in the end. Now the commands are still working.
-
terdon over 10 years
-
Shoeb over 10 yearsOk, sorry for the multiple questions and thanks for the answers.
-
Bananguin over 10 yearsWelcome to the bright side! Before we google, we like to read manuals, called man pages. Bash's man page (man bash) can answer all your questions.
-
terdon over 10 years@Bananguin in the OP's defense,
man bash
is 5465 lines long, not the easiest of reads.
-
-
Shoeb over 10 yearsThanks for the additional info. I updated my question with the echo $PATH output. It looks a little weird.