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;}''