Ao trabalhar no console, quero saber qual Ruby e gemset está ativado atualmente pelo RVM. A melhor solução é exibir essas informações no prompt:
O RVM fornece uma função para esse fim – basta colocar rvm-prompt
na linha de comando:
→ rvm-prompt
ruby-1.9.3-p392@aina
→ rvm use 1.9.3
→ rvm-prompt
ruby-1.9.3-p392
Quando no default
gemset, não é a saÃda de rvm-prompt
. Além disso, esse ruby-
prefixo não é necessário para as nossas necessidades.
Permite armazenar a saÃda na variável:
→ rbv=`rvm-prompt`
É claro que ecoar essa variável produzirá o mesmo resultado:
→ echo $rbv
ruby-1.9.3-p392
Vamos modificar a avaliação desse bit variável. Em bash
(ou zsh
) você pode utilizar a chamada expansão de parâmetro . O melhor para ilustrar é colocar um exemplo de saÃda:
→ echo ${#rbv}
15
A saÃda deste comando é o comprimento da string armazenado em rbv
. Vamos tentar outro:
→ echo ${rbv:5}
1.9.3-p392
Isso é colocado no console da substring armazenada a rbv
partir do 6º caractere até o final da string. Agora começamos a chegar a algum lugar. Mas sejamos um pouco mais espertos:
→ echo ${rbv#ruby-}
1.9.3-p392
Esta expansão retorna a string sem o padrão de correspondência na frente da string.
OK, mas e o conjunto de default
joias? Bem, vamos usar força bruta 🙂 Se não houver um @
caractere na saÃda de, vamos concatenar nossa pequena variável com . Não é muito inteligente, mas funciona bem em nosso cenário.rvm-prompt
@default
Como testar se existe um determinado caractere na string?
→ [[ $rbv == *"@"* ]]
→ echo $?
1
Estamos testando a presença de @
em rbv
. O resultado é armazenado no código de saÃda do interpretador. Isso engraçado echo
colocará o código de saÃda do último comando no console. Neste caso, @
não está presente. Em caso oposto, 0
seria devolvido.
Agora é hora de colar tudo junto. Crie uma função na sua pasta pessoal .bash_profile
ou .zshrc
na sua pasta pessoal:
function prompt_rvm {
rbv=`rvm-prompt`
rbv=${rbv#ruby-}
[[ $rbv == *"@"* ]] || rbv="${rbv}@default"
echo $rbv
}
E consuma essa função em seu prompt mais tarde
bash :export PS1="\u@\h \w \$(prompt_rvm) \$ "
zsh :PROMPT='%n@%m %~ $(prompt_rvm)
Felicidades 🙂