Wie kann ich "ruby" dazu bringen, das zu tun, was "ruby1.9.1" tut?

7

Ich möchte damit beginnen, dass ich ... 1.9.2 wirklich nicht verwenden muss. Ich verstehe, dass Sie Python 3.2 niemals verwenden. Wenn der allgemeine Rat lautet, dass ich 1.8 verwenden sollte, werde ich das tun. Aber sag mir nicht, dass ich das tun soll, weil es einfacher ist.

Unabhängig davon, welche Version ich verwenden sollte, ist die Frage immer noch relevant: Wie kann ein Befehl einen anderen Befehl ausführen?

(Ich nehme an, ich könnte ein AC-Programm schreiben, um ruby1.9.1 zu starten, den ausführbaren Ruby aufzurufen und in meinen Papierkorb zu legen, aber das scheint weniger als eine gute Idee zu sein.)

Daniel
quelle

Antworten:

7

Zunächst einmal müssten Sie keine C-Anwendung schreiben - ein einfaches Bash-Liedchen würde Ihnen gut tun.

Ich denke, die sauberste Lösung würde das update-alternativesSystem betreffen. Auf diese Weise gelingt es Ubuntu beispielsweise, verschiedene virtuelle Java-Maschinen getrennt zu halten, während sie nebeneinander installiert werden. Das Problem ist, dass Sie es selbst einrichten müssen.

Ich bin gerade auf einen Mailinglisten-Post gestoßen, der den größten Teil des schweren Hebens für Sie zu erledigen scheint. Möglicherweise müssen Sie die Versionsnummern geringfügig ändern, aber ansonsten sollten Sie auf die Idee kommen.

Für die Nachwelt (falls Google die URL oder den Thread nixt) werde ich jetzt im Geschäftsende kopieren, aber ich nehme keine Gutschrift für das Schreiben.

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 
Oli
quelle
1
Ist das ein Shell-Skript? Ich habe keine Ahnung, wie man eines davon bearbeitet ... Ich habe versucht, die Zeilen in die Befehlszeile zu kopieren. Das hat nicht funktioniert. Hilfe, was mache ich?
Daniel
6

Hier ist eine weitere Frage in diesem Sinne: Wie deinstallieren Sie Ruby 1.8.7 und installieren Ruby 1.9.2?

Die Lösung besteht darin, den folgenden Befehl auszuführen:

sudo update-alternatives --config ruby

Dann erhalten Sie diese Ausgabe:

   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]
kristianp
quelle