Como obtenho “ruby” para fazer o que “ruby1.9.1” faz?

7

Eu quero começar dizendo ... Eu realmente não preciso estar usando 1.9.2. Eu entendo que você nunca usa o Python 3.2, então se o conselho comum é que eu deveria usar 1.8, eu farei isso. Mas não me diga para fazer isso porque é mais fácil.

Qualquer que seja a versão que eu deveria estar usando, a questão ainda é relevante: o que é uma boa maneira de fazer um comando fazer outro comando?

(Eu suponho que eu poderia escrever um programa c para iniciar o ruby1.9.1, chamar o executável ruby, e colocá-lo no meu bin, mas isso parece ser menos que uma boa idéia)

    
por Daniel 09.08.2011 / 03:42

2 respostas

7

Bem, para começar, você não precisaria escrever um aplicativo em C - um simples bash ditty faria você bem.

Acho que a solução mais limpa possível envolveria o sistema update-alternatives . É assim que, por exemplo, o Ubuntu consegue manter várias máquinas virtuais Java separadas enquanto instaladas lado a lado. O problema é que você precisa configurá-lo sozinho.

Acabei de encontrar uma postagem de uma lista de discussão que não parece fazer a maior parte do trabalho pesado para você. Você pode precisar alterar os números de versão um pouco, mas além disso, você deve ter a idéia.

Para a posteridade (no caso do Google mexer no URL ou no tópico), vou copiar no final do negócio agora, mas não tenho nenhum crédito por escrevê-lo.

If any of you are using Ubuntu this is a pretty nice way to manage multiple 
ruby interpreters. 

It has the advantage of managing the manpages, ri, and irb as "slaves", so 
they change when a new interpreter is selected. 

here's the code: 

# become root 
su 

# make sure the packages are installed for 1.8 & 1.9 
aptitude install -s  ~n^ruby1.[89]$ ~n^irb1.[89]$ ~n^ri1.[89] 

# install ruby1.8 & friends with priority 500 
# so this will be the default "auto" choice 
update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.8 500 \ 
                    --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz \ 
                                  /usr/share/man/man1/ruby.1.8.gz \ 
                    --slave   /usr/bin/ri ri /usr/bin/ri1.8 \ 
                    --slave   /usr/bin/irb irb /usr/bin/irb1.8 

# install ruby1.9 & friends with priority 400 
update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9 400 \ 
                    --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz \ 
                                   /usr/share/man/man1/ruby.1.9.gz \ 
                    --slave   /usr/bin/ri ri /usr/bin/ri1.9 \ 
                    --slave   /usr/bin/irb irb /usr/bin/irb1.9 

# choose your interpreter 
# changes symlinks for /usr/bin/ruby , 
# /usr/bin/irb, /usr/bin/ri and man (1) ruby 
update-alternatives --config ruby 

for those with additional interpreters in say /usr/local/bin, other Debian 
variants, or managing other tools, vary as required. 

% man update-alternatives 

hope wrapping didn't mangle it too much, and that someone finds this useful 
... 
-- 
cheers, 
David Lee 
    
por Oli 09.08.2011 / 05:55
6

Aqui está outra pergunta no mesmo sentido: Como você desinstala Ruby 1.8.7 e instale o Ruby 1.9.2?

A solução é executar o seguinte comando:

sudo update-alternatives --config ruby

Então você obterá esta saída:

   There are 2 choices for the alternative ruby (providing /usr/bin/ruby).

     Selection    Path                Priority   Status
   ------------------------------------------------------------
   * 0            /usr/bin/ruby1.8     50        auto mode
     1            /usr/bin/ruby1.8     50        manual mode
     2            /usr/bin/ruby1.9.1   10        manual mode

   Press enter to keep the current choice[*], or type selection number: 2
   update-alternatives: using /usr/bin/ruby1.9.1 to provide /usr/bin/ruby (ruby) in    manual mode.
   $ ruby --version
   ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
    
por kristianp 20.03.2012 / 12:34