web-dev-qa-db-fra.com

Installer la dernière version stable de Ruby à l'aide de rbenv

Je souhaite installer la dernière version stable de Ruby disponible avec rbenv . Cette fonctionnalité ne se produira pas dans Rbenv lui-même.

Lorsque j'exécute la commande rbenv install -l dans mon shell, la liste des versions disponibles est longue. La liste contient tous les types d'entrées. Voici une liste partielle illustrant le format et la diversité:

$ 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

Mon but est d'automatiser la commande rbenv install VERSION dans un script Shell où VERSION est la version la plus élevée de x.x.x. En d'autres termes, je dois substituer automatiquement l'entrée la plus haute de la liste qui commence par un nombre et ne se termine pas par -something dans VERSION. De cette liste, j'ai besoin de 2.2.2.

Que puis-je mettre dans mon script Shell pour choisir automatiquement la version la plus élevée de x.x.x dans la commande rbenv install x.x.x?

Edit: Comme Ruby n’est pas encore installé, la solution doit être en Bash et non en Ruby.

Edit 2: Je veux la version MRI (grand public) de Ruby.

20
user636044
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 }'
  • Prenez la plus grande version (ordre trié ou non)

Si list est trié, un sed plus simple (version posix) suffit

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

Solution simple (installe directement la dernière version stable):

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

Explication:

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

Filtre toutes les versions contenant un trait d'union -, qui correspond à toutes les versions non-IRM et à la version préliminaire d'IRM. Ensuite, sélectionne le dernier, garanti comme étant le plus élevé, car la sortie de Ruby-build est déjà triée par ordre croissant de numéro de version.

33
mislav

Après de nombreux essais et erreurs, j'ai trouvé un moyen de récupérer la dernière version stable de cette liste. Ce n’est pas parfait car il ne fait que saisir le bon motif et la dernière version de celui-ci, mais il devrait faire son travail. Cela fonctionnera tant que les versions sont en ordre.

Cela produira 2.2.2

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

Nous pouvons brancher ce résultat dans rbenv install comme ceci:

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

La mienne est similaire à la réponse d'Anonymous (mais plus courte parce que j'utilise\d).

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

Je voulais spécifier le dernier jruby, c'est pourquoi j'ai utilisé un "2" pour pouvoir remplacer le 2 par "jruby":

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

Vous pouvez remplacer jruby par d'autres chaînes pour obtenir différents types de Ruby, par exemple. rbx, mruby.

0
kristianp