Estou criando um script bash para instalar automaticamente a última versão estável do Ruby sem privilégios de root. Isto é o que tenho até agora:
#Install GPG Keys
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import
#Install RVM
curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
echo "source $HOME/.rvm/scripts/rvm" >> ~/.bash_profile
#Set environment
source $HOME/.rvm/scripts/rvm
#Install Ruby
rvm install $RUBY_VERSION
Preciso encontrar a última versão estável do Ruby para definir RUBY_VERSION
a variável.
Responder1
Supondo que a última versão estável seja sempre o último arquivo com um nome de arquivo como ruby-2.5.1.tar.gz
emhttps://cache.ruby-lang.org/pub/ruby/, você pode extrair o número da versão com:
curl -s https://cache.ruby-lang.org/pub/ruby/ | sed -nr '1h;1!H;$!d;x;s/.*ruby-([0-9.]+).tar.gz.*/\1/p'
Essa abordagem usacurl
para recuperar a lista de arquivos eGNUsed
para cortar o número da versão conforme explicado emesta resposta SO. Você também pode usar grep
comolhares ao redorem vez disso, pode até ser um pouco mais rápido:
curl -s https://cache.ruby-lang.org/pub/ruby/ | grep -oP '(?<=ruby-)\d\.\d\.\d(?=.tar.gz)' | tail -1
Basta adicionar uma linha definindo a RUBY_VERSION
variável ao seu script:
#Get version number of latest stable Ruby version
RUBY_VERSION=$(curl -s https://cache.ruby-lang.org/pub/ruby/ | sed -nr '1h;1!H;$!d;x;s/.*ruby-([0-9.]+).tar.gz.*/\1/p')
#Install Ruby
rvm install $RUBY_VERSION
Exemplo de execução
$ curl -s https://cache.ruby-lang.org/pub/ruby/ | sed -nr '1h;1!H;$!d;x;s/.*ruby-([0-9.]+).tar.gz.*/\1/p'
2.5.1
$ curl -s https://cache.ruby-lang.org/pub/ruby/ | grep -oP '(?<=ruby-)\d\.\d\.\d(?=.tar.gz)' | tail -1
2.5.1