Install Latest Stable Version of Ruby Using rbenv

user636044 picture user636044 · May 12, 2015 · Viewed 10.4k times · Source

I want to install the latest stable version of Ruby available with rbenv. This feature won't be happening in rbenv itself.

When I run the command rbenv install -l in my shell, I get a long list of available versions. The list has all types of entries. The following is a partial list to demonstrate the format and diversity:

$ rbenv install -l
Available versions:
  2.0.0-p643
  2.0.0-p645
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.4
  2.1.5
  2.1.6
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  2.2.1
  2.2.2
  2.3.0-dev
  jruby-1.7.19
  jruby-1.7.20
  jruby-9.0.0.0-dev
  jruby-9.0.0.0+graal-dev
  jruby-9.0.0.0.pre1
  jruby-9.0.0.0.pre2
  maglev-1.0.0
  maglev-1.1.0-dev
  maglev-2.0.0-dev
  mruby-dev
  mruby-1.0.0
  mruby-1.1.0
  rbx-2.5.2
  rbx-2.5.3
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev

My goal is to automate the command rbenv install VERSION in a shell script where VERSION is the highest x.x.x release. In other words, I need to automatically substitute the highest entry on the list that starts with a number and does not end with -something into VERSION. From this list, I need 2.2.2.

What can I put in my shell script to automatically pick the highest x.x.x version in the command rbenv install x.x.x?

Edit: Since Ruby is not yet installed, the solution has to be in Bash and not Ruby.

Edit 2: I want the MRI (mainstream) version of Ruby.

Answer

mislav picture mislav · May 12, 2015

Simple solution (directly installs latest stable version):

rbenv install $(rbenv install -l | grep -v - | tail -1)

Explanation:

rbenv install -l | grep -v - | tail -1

Filters out all versions that contain a hyphen -, which is all non-MRI versions and prerelease MRI versions. Then selects the last one, guaranteed to be the highest because ruby-build output is already sorted by version number ascending.