So, I have something happening that I don't understand. I am on OS
10.5.6 and followed Dan Benjamin's (Hivelogic) advice on how to
install Ruby, MySQL.... As he suggests, I added . ~/.bash_login with
the path for the MySQL installation. I also added . ~/.profile with
the path for the Ruby installation.
Now, when I start Terminal and run:
% ruby -v # -> version 1.8.6
% gem list # -> I get a list with various versions of active record,
actionmailer, rake and... no mysql (2.7) gem
Then if I run:
% . ~/.profile
% ruby -v # -> version 1.8.7
% gem list # Get updated gem list including mysql gem
But if I close that terminal window and open a new one -- the above is
reset.
Why does that happen? and how do I get the path to load automatically?
So, I have something happening that I don't understand. I am on OS
10.5.6 and followed Dan Benjamin's (Hivelogic) advice on how to
install Ruby, MySQL.... As he suggests, I added . ~/.bash_login with
the path for the MySQL installation. I also added . ~/.profile with
the path for the Ruby installation.
Now, when I start Terminal and run:
% ruby -v # -> version 1.8.6
% gem list # -> I get a list with various versions of active record,
actionmailer, rake and... no mysql (2.7) gem
Then if I run:
% . ~/.profile
% ruby -v # -> version 1.8.7
% gem list # Get updated gem list including mysql gem
But if I close that terminal window and open a new one -- the above is
reset.
Why does that happen? and how do I get the path to load automatically?
What rules should I add to it? and where do I add them?
You want either a .profile or a .bash_profile, not both. Once bash sees the .bash_profile, it won't look for the .profile; that's why you're having to source it manually. From bash(1):
When bash is invoked as an interactive login shell, or as a
non-inter- active shell with the --login option, it first
reads and executes com- mands from the file /etc/profile,
if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that
order, and reads and executes commands from the first one
that exists and is readable.
I actually prefer just to have a .profile, but if you have to support other sh-derivatives, .bash_profile lets you play it safe.
What rules should I add to it? and where do I add them?
You want either a .profile or a .bash_profile, not both. Once bash sees
the .bash_profile, it won't look for the .profile; that's why you're
having to source it manually. From bash(1):
When bash is invoked as an interactive login shell, or as a
non-inter- active shell with the --login option, it first
reads and executes com- mands from the file /etc/profile,
if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that
order, and reads and executes commands from the first one
that exists and is readable.
I actually prefer just to have a .profile, but if you have to support
other sh-derivatives, .bash_profile lets you play it safe.
Thank you for explaining. Just to verify that my path will be set
correctly, I should change:
No; there was no problem with what you had, just that you split it across two or three files. You only should have exactly one of .profile, .bash_profile, and .bash_login.
>>> And my ~/.bash_profile has the following:
>> ...
>>> What rules should I add to it? and where do I add them?
>> You want either a .profile or a .bash_profile, not both. Once bash sees
>> the .bash_profile, it won't look for the .profile; that's why you're
>> having to source it manually. From bash(1):
>> When bash is invoked as an interactive login shell, or as a
>> non-inter- active shell with the --login option, it first
>> reads and executes com- mands from the file /etc/profile,
>> if that file exists. After reading that file, it looks for
>> ~/.bash_profile, ~/.bash_login, and ~/.profile, in that
>> order, and reads and executes commands from the first one
>> that exists and is readable.
>> I actually prefer just to have a .profile, but if you have to support
>> other sh-derivatives, .bash_profile lets you play it safe.
> Thank you for explaining. Just to verify that my path will be set
> correctly, I should change:
No; there was no problem with what you had, just that you split it
across two or three files. You only should have exactly one of
.profile, .bash_profile, and .bash_login.
Sorry, reread your post -- Just confused with an earlier sentence:
What rules should I add to it? and where do I add them?
You want either a .profile or a .bash_profile, not both. Once bash sees
the .bash_profile, it won't look for the .profile; that's why you're
having to source it manually. From bash(1):
When bash is invoked as an interactive login shell, or as a
non-inter- active shell with the --login option, it first
reads and executes com- mands from the file /etc/profile,
if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that
order, and reads and executes commands from the first one
that exists and is readable.
I actually prefer just to have a .profile, but if you have to support
other sh-derivatives, .bash_profile lets you play it safe.
Thank you for explaining. Just to verify that my path will be set
correctly, I should change:
PATH="/opt/subversion/bin:${PATH}"
export PATH
to
PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/opt/
subversion/bin:${PATH}"
export PATH
is that correct?
No; there was no problem with what you had, just that you split it
across two or three files. You only should have exactly one of
.profile, .bash_profile, and .bash_login.
Sorry to be difficult but I actually have all 3 files.
Which should I delete?
And then, what happens to the information within?
Concatenate them. For example, something like:
cp /dev/null profile
for f in ~/.profile ~/.bash_login ~/.bash_profile
do
mv $f orig$f
cat $f >> profile
done
mv profile ~/.profile
What rules should I add to it? and where do I add them?
You want either a .profile or a .bash_profile, not both. Once bash sees
the .bash_profile, it won't look for the .profile; that's why you're
having to source it manually. From bash(1):
When bash is invoked as an interactive login shell, or as a
non-inter- active shell with the --login option, it first
reads and executes com- mands from the file /etc/profile,
if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that
order, and reads and executes commands from the first one
that exists and is readable.
I actually prefer just to have a .profile, but if you have to support
other sh-derivatives, .bash_profile lets you play it safe.
Thank you for explaining. Just to verify that my path will be set
correctly, I should change:
PATH="/opt/subversion/bin:${PATH}"
export PATH
to
PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/opt/
subversion/bin:${PATH}"
export PATH
is that correct?
No; there was no problem with what you had, just that you split it
across two or three files. You only should have exactly one of
.profile, .bash_profile, and .bash_login.
Sorry to be difficult but I actually have all 3 files.
Which should I delete?
And then, what happens to the information within?
Concatenate them. For example, something like:
cp /dev/null profile
for f in ~/.profile ~/.bash_login ~/.bash_profile
do
mv $f orig$f
cat $f >> profile
Whoops, you'd have to swap those lines. Warning: I haven't actually run this code.
Solved.
Both the ~/.profile and ~/.bash_login had the same path defined but
did not load in login.
Adding the path to ~/.bash_profile fixed the problem.
Checked:
which mysql
which svn
which git
gem list
and all is good.
Half way through, I realised it wasn't really a rails problem -- so,
apologies for that.
Hopefully, this will help someone else.