簡體   English   中英

使用 rbenv 安裝最新的穩定版 Ruby

[英]Install Latest Stable Version of Ruby Using rbenv

我想安裝rbenv可用的最新穩定版 Ruby。 此功能不會在 rbenv 本身中發生

當我在我的 shell 中運行命令rbenv install -l時,我得到了一長串可用版本。 該列表包含所有類型的條目。 以下是展示格式和多樣性的部分列表:

$ 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

我的目標是在一個 shell 腳本中自動執行命令rbenv install VERSION ,其中VERSION是最高的xxx版本。 換句話說,我需要自動將列表中以數字開頭且不以-something結尾的最高條目替換為VERSION 從這個列表中,我需要2.2.2

我可以在我的 shell 腳本中放入什么來自動選擇命令rbenv install xxx的最高xxx版本?

編輯:由於尚未安裝 Ruby,因此解決方案必須使用 Bash 而不是 Ruby。

編輯 2:我想要 Ruby 的 MRI(主流)版本。

簡單的解決方案 (直接安裝最新的穩定版):

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

說明:

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

過濾掉所有包含連字符的版本-這是所有非MRI版本和預發布的MRI版本。 然后選擇最后一個,保證最高,因為ruby-build輸出已按版本號升序排序。

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 }'
  • 采取最大的版本(排序或不排序)

如果列表被排序,則更簡單的sed(posix版本)就足夠了

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

經過相當多的反復試驗后,我想出了一種從這個列表中獲取最新穩定版本的方法。 這並不完美,因為它只是抓住了正確的模式和它的最后一個版本,但它應該完成工作。 只要版本有序,它就會起作用。

這將產生2.2.2

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

我們可以將結果插入到rbenv install如下所示:

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

我的答案與Anonymous的答案相似(但更短,因為我正在使用\\ d)。

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

我想指定最新的jruby,這就是我使用“2”的原因,所以我可以用“jruby”代替2:

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

你可以用其他字符串替換jruby以獲得不同類型的紅寶石,例如rbx,mruby。

首先應該使用rbenv安裝ruby-build以獲取最新版本的ruby ..請按照以下步驟操作:

  • brew reinstall --HEAD ruby-build (如果rbenv已經安裝brew可能會通過一些錯誤然后繼續前進和簡單
    • brew unlink ruby-build
    • brew install --HEAD ruby-build
  • brew upgrade
  • 然后你可以使用上面建議的上述方法之一自動安裝最新版本或簡單地rbenv install <required latest version>

在macOS 10.13.6中工作

您可以為此使用xxenv-latest插件,該插件也適用於 nodeenv、pyenv 等。

你提到自動化; 這是我用來設置最新 Ruby 的完整命令列表:

# Install rbenv
brew install rbenv

# Initialize rbenv to run now
eval "$(rbenv init -)"

# Install xxenv-latest rbenv plugin
git clone https://github.com/momo-lab/xxenv-latest.git "$(rbenv root)"/plugins/xxenv-latest

# Install latest Ruby and set as global
rbenv latest install
rbenv latest global

我寧願在Ruby中比在bash中這樣做。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM