OS X reads builtin version of ruby

Ok, so i've tried to install 1.8.6 in a few ways, the first was building
it from source and most recently using macports. I've added the correct
lines to both my /etc/profile and ~/.bash_login. Whenever I reload these
files manually I get the correct version of ruby by issuing the version
command. Can anyone help? I searched the forum for my question but had
difficulty finding an answer. Sorry if this has been asked a million
times.

···

--
Posted via http://www.ruby-forum.com/.

Ok, so i've tried to install 1.8.6 in a few ways, the first was building
it from source and most recently using macports. I've added the correct
lines to both my /etc/profile and ~/.bash_login. Whenever I reload these
files manually I get the correct version of ruby by issuing the version
command. Can anyone help? I searched the forum for my question but had
difficulty finding an answer. Sorry if this has been asked a million
times.

You need to update your PATH in ~/.bashrc. profile/bash_profile are run for
login shells. Starting a terminal isn't neessarily going to run a login
shell.

···

On 6/25/07, Herb Fitz <hfitzy@gmail.com> wrote:

--
Posted via http://www.ruby-forum.com/\.

The overkill way would be something like

sudo mv /usr/bin/ruby /usr/bin/ruby-old-1.8.2
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby # or ln -s /opt/local/bin/ruby ... if you want to use the one macports installed

BUT you will have to remember to update the link if you want to update ruby -- and this is a less good solution than getting the path right in the first place because you have two things to update instead of just one. Getting the path right would involve something like
export PATH=/usr/local/bin:/usr/local/mysql/bin:/opt/local/bin:/opt/local/sbin:$PATH in your .profile

Then again, expediency is the mother of invention.

···

On 25 Jun 2007, at 16:14, Herb Fitz wrote:

Ok, so i've tried to install 1.8.6 in a few ways, the first was building
it from source and most recently using macports. I've added the correct
lines to both my /etc/profile and ~/.bash_login. Whenever I reload these
files manually I get the correct version of ruby by issuing the version
command. Can anyone help? I searched the forum for my question but had
difficulty finding an answer. Sorry if this has been asked a million
times.

--
Posted via http://www.ruby-forum.com/\.

What are you actually saying in order to invoke ruby, and where are you
invoking it from? The Terminal, for example, is not the same BBEdit.

I can only tell you what I did after installing ruby 1.8.5 in
/usr/local/bin, which was to edit my .bash_profile (not my .bash_login)
to include this line:

PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

Here is some output in my terminal:

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/bin:/sbin:/usr/bin:
/usr/sbin
$ which ruby
/usr/local/bin/ruby
$ ruby --version
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.7.0]
$ ruby -e 'puts ENV["PATH"]'
/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/bin:/sbin:/usr/bin:
/usr/sbin

TextMate uses the same shell, so things work there too.

But in BBEdit if I just want to use the Run command, I must start the
script with an explicit shebang line:

#! /usr/local/bin/ruby

And even then it does not pick up the new PATH. The solution to *that*
is to edit .MacOSX/environment.plist. You must provide a full, explicit
PATH value (there is no variable expansion here).

m.

···

Herb Fitz <hfitzy@gmail.com> wrote:

Ok, so i've tried to install 1.8.6 in a few ways, the first was building
it from source and most recently using macports. I've added the correct
lines to both my /etc/profile and ~/.bash_login. Whenever I reload these
files manually I get the correct version of ruby by issuing the version
command. Can anyone help? I searched the forum for my question but had
difficulty finding an answer. Sorry if this has been asked a million
times.

--
matt neuburg, phd = matt@tidbits.com, Matt Neuburg’s Home Page
Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
AppleScript - http://www.amazon.com/gp/product/0596102119
Read TidBITS! It's free and smart. http://www.tidbits.com

You need to update your PATH in ~/.bashrc. profile/bash_profile are run
for
login shells. Starting a terminal isn't neessarily going to run a login
shell.

Hi, thanks for the quick reply. It still seems to be reading the old
version of ruby over the new one. I updated .bashrc like you said. Is
there any way to disable the older version? It seems like its just
having a conflict choosing between the two.

···

--
Posted via http://www.ruby-forum.com/\.

Do you have a non-native Python installed?

When I followed the HiveLogic directions for installing Ruby (found here: Dan Benjamin), I found that OS X would find the correct version of Ruby until I quit Terminal and re-opened it. The problem, it turned out, was Python: the line Python installs in ~/.bash_profile seemed to be overriding the PATH setting in ~/.bash_login that the HiveLogic article advised.

My solution was to move the Python line from .bash_profile, and include it in .bash_login. I then deleted .bash_profile (or rather, moved it to .bash_profile.bad.) My .bash_login now looks like this:

···

-------------
export PATH="/usr/local/bin:/usr/local/sbin:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/local/mysql/bin:${PATH}"
export RUBYOPT="-rubygems"
-------------

which seems to work like a charm. I'm not all that knowledgeable about this stuff, though, so you may better off editing .bashrc, as Herbie advised.

Herbie Fitzgerald wrote:

You need to update your PATH in ~/.bashrc. profile/bash_profile are run for
login shells. Starting a terminal isn't neessarily going to run a login
shell.

The line Python installs in ~/.bash_profile seemed to be overriding

    > the PATH setting in ~/.bash_login that the HiveLogic article
    > advised.

    > My solution was to move the Python line from .bash_profile, and
    > include it in .bash_login. I then deleted .bash_profile (or
    > rather, moved it to .bash_profile.bad.) My .bash_login now looks
    > like this:

You should move the contents of '.bash_login' to '.bashrc'

For an interactive login shell (like the one you see in OS X Terminal), when
bash starts up, it looks for the following files (in the order listed) and reads
only the FIRST file it finds (in your case, .bash_login, since you deleted
.bash_profile):

    1. ~/.bash_profile
    2. ~/.bash_login
    3. ~/.profile (this is mostly for Bourne Shell compatibility)

However, a non-login shell will ONLY read ~/.bashrc

You can check this behavior by trying out the experiment listed at the bottom of
this post.

In order to ensure a consistent behavior (e.g. for the shells that you open via
Terminal.app and also for the ones that other applications such as BBEdit or
TextMate open for you), try the following:

1. Move the content of .bash_login to .bashrc
2. Delete .bash_login (after moving its contents)
3. Edit a new .bash_profile to have the following content:

   # Check for bash rc and source it. All changes to to that file.
   [[ -f ~/.bashrc ]] && . ~/.bashrc

   This line basically ensures that contents of .bashrc are also loaded when you
   have a normal login shell.

4. Quit Terminal.app and relaunch. Your PATH related changes should be
   effective.

    > which seems to work like a charm. I'm not all that knowledgeable
    > about this stuff, though, so you may better off editing .bashrc, as
    > Herbie advised.

The bash manual page at:

has all the gory details which will help you here.

Another good and succinct article explaining the concept is:

http://jmatrix.net/dao/case/case.jsp?case=7F000001-1C208B0-10C91F4FD67-107

Hope this helps.

=================================== EXPERIMENT =================================

As an experiment, try this (first backup your existing files by renaming them to
something like .bash_login.bkp, .bash_profile.bkp and .bashrc.bkp):

Step 1: Create a single line .bash_profile with the content:

       echo "bash_profile was read"

Step 2: Create a single line .bashrc with the content:

       echo "bashrc was read"

Step 3: Ensure that you have renamed .bash_login and no such file exists in your
        home directory.

Step 4: Quit the Terminal.app and restart it again (or open a new Terminal
        Window). You should see this in the Terminal window:

       bash_profile was read

       This indicates that only bash_profile is read on an interactive login
       terminal.

Step 5: Now enter the following command to start another interactive (BUT
        non-login bash shell:

       <prompt> $ bash

       You should see the following:

       bashrc was read

This indicates that this time around, only .bashrc was read by the shell, since
it determined that it is *not* a login shell.

Step 6: Revert back all files from the .bkp versions you had created earlier.

···

===============================================================================

--
Anupam