update rails instalar descargar actualizar ruby bash shell sed rbenv

rails - rvm install ruby



Instale la última versión estable de Ruby usando rbenv (5)

Quiero instalar la última versión estable de Ruby disponible con rbenv . Esta característica no estará ocurriendo en el propio rbenv.

Cuando ejecuto el comando rbenv install -l en mi shell, obtengo una larga lista de versiones disponibles. La lista tiene todo tipo de entradas. La siguiente es una lista parcial para demostrar el formato y la diversidad:

$ 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

Mi objetivo es automatizar el comando rbenv install VERSION en un script de shell donde VERSION es la versión más alta de xxx . En otras palabras, debo sustituir automáticamente la entrada más alta en la lista que comienza con un número y no termina con -something en VERSION . De esta lista, necesito 2.2.2 .

¿Qué puedo poner en mi script de shell para elegir automáticamente la versión xxx más alta en el comando rbenv install xxx ?

Edición: como Ruby aún no está instalado, la solución debe estar en Bash y no en Ruby.

Edición 2: quiero la versión MRI (mainstream) de Ruby.


Después de un poco de prueba y error, descubrí una forma de obtener la última versión estable de esta lista. Esto no es perfecto, ya que simplemente agarra el patrón correcto y la última versión, pero debería hacer el trabajo. Funcionará siempre que las versiones estén en orden.

Esto producirá 2.2.2

rbenv install -l | grep -P "^ [[:digit:]]/.[[:digit:]]/.[[:digit:]]$" | tail -1

Podemos conectar ese resultado en la rbenv install esta manera:

rbenv install $(rbenv install -l | grep -P "^ [[:digit:]]/.[[:digit:]]/.[[:digit:]]$" | tail -1)


La mía es similar a la respuesta de Anonymous (pero más corta porque estoy usando / d).

rbenv install -l| grep -P "/s2.*(/.|/d)/d$" | tail -1

Quería especificar el último jruby, por lo que usé un "2", por lo que puedo reemplazar el 2 por "jruby":

rbenv install -l| grep -P "/sjruby.*(/.|/d)/d$"|tail -1

Puede reemplazar jruby con otras cadenas para obtener diferentes tipos de ruby, por ejemplo, rbx, mruby.


Preferiría hacerlo en Ruby que en bash.

versions = `rbenv install -l` versions.split("/s").select{|v| v.match( /^/d*/./d*/./d*$/ )}.last


Solución simple (instala directamente la última versión estable):

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

Explicación:

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

Filtra todas las versiones que contienen un guión, que son todas las versiones que no son MRI y las versiones preliminares MRI. Luego selecciona la última, que se garantiza que será la más alta porque la salida de ruby-build ya está ordenada por número de versión ascendente.


rbenv install -l | awk -F ''.'' '' /^[[:space:]]*[0-9]+/.[0-9]+/.[0-9]+[[:space:]]*$/ { if ( ($1 * 100 + $2) * 100 + $3 > Max ) { Max = ($1 * 100 + $2) * 100 + $3 Version=$0 } } END { print Version }''

  • Tome la versión más grande (ordenada o no)

Si la lista está ordenada, basta con un sed más simple (versión posix)

rbenv install -l | sed -n ''/^[[:space:]]*[0-9]/{1,/}/.[0-9]/{1,/}/.[0-9]/{1,/}[[:space:]]*$/ h;${g;p;}''