Blog do TaQ

Verificando a versão do Ruby no prompt do Bash

Publicado em Developer

Volta e meia depois de instalar a RVM eu fazia alguma caquinha misturando as versões do Ruby estando em uma e achando que estava em outra, mas agora dei um jeito de me deixar atento, mesmo em ambientes que não tem a RVM instalada, somente alguma versão do Ruby. Depende do servidor que pipoca aqui nos terminais via SSH, é importante ficar de olho também para não fazer alguma caca.

Inspirado na funcão __git_ps1, eu fiz uma função para o Bash indicar qual a versão do Ruby atualmente em uso e utilizei para mostrar no prompt. A função __ruby_ps1 está nesse arquivo, cujo conteúdo mostro abaixo:

__ruby_ps1 () {
   if [ -e ./app/controllers/application_controller.rb ] ||
      [ "$(find -maxdepth 1 -name '*.rb' | head -n1)" != "" ]; then
      rst=$(ruby -v | cut -f1-2 -d' ')
      fmt="%s"
      if [ -n "$1" ]; then
         fmt="$1"
      fi
      printf "$fmt" "$rst"
   fi
}

A função detecta se você está em algum diretório com algum arquivo *.rb ou na raiz de uma app Rails, procurando pelo arquivo ./app/controllers/application_controller.rb, o que já me quebra um bom galho, mas que talvez seja alterado mais tarde.

Gravei esse conteúdo em um arquivo chamado ruby-version.bash, fiz um source dele dentro do meu .bashrc e alterei o meu prompt, inserindo o seguinte conteúdo, para me mostrar a versão em fundo vermelho e letras brancas em negrito:

PS1='\e[41m\e[1;37m$(__ruby_ps1 " %s ")\[\e[0m'

E deu nisso aqui:

Screenshot do terminal

Atualizado:

O @nuxlii fez essa versão pegando o valor da RVM e eu adaptei nessa daqui. Se alguém tiver mais alguma, manda aí. :-)

Atualizado:

Fiz uma nova versão que vai servir para qualquer caso, com a RVM instalada ou não e vai me quebrar o galho no desktop e nos servidores. O arquivo novo está aqui e, para o caso da RVM, dá para passar até os formatadores do rvm-prompt (como bem apontou o @rafaeldx7) a partir do segundo parâmetro, o primeiro sempre fica com a formatação do printf. Segue o código:

# First parameter is a bash printf formatting string
# From second till fifth parameter, rvm-prompt format parameters
__ruby_ps1 () {
   if [ ! -f ./Rakefile ] &&
      [ "$(find -maxdepth 1 -name '*.rb' | head -n1)" == "" ]; then
      exit 1
   fi
   if [ -f ~/.rvm/bin/rvm-prompt ]; then
      rst=$(~/.rvm/bin/rvm-prompt $2 $3 $4 $5)
   fi
   if [ -z "$rst" ]; then
      rst=$(ruby -v | cut -f2 -d' ')
   fi
   fmt="%s"
   if [ -n "$1" ]; then
      fmt="$1"
   fi
   if [ -n "$rst" ]; then
      printf "$fmt" "${rst}"
   fi
}

E o exemplo de usar __ruby_ps1 " %s " i v, sem e com a RVM:

Screenshot do terminal
Tags:


Comentários

comments powered by Disqus

Twitter