Ich möchte, dass mein Ruby-Programm auf einem Mac andere Aufgaben ausführt als unter Windows. Wie kann ich herausfinden, auf welchem System mein Programm ausgeführt wird?
ruby
operating-system
Andrew Marshall
quelle
quelle
Antworten:
Verwenden Sie die
RUBY_PLATFORM
Konstante und wickeln Sie sie optional in ein Modul ein, um sie benutzerfreundlicher zu gestalten:Es ist nicht perfekt, funktioniert aber gut für die Plattformen, auf denen ich entwickle, und es ist einfach genug, es zu erweitern.
quelle
RbConfig::CONFIG["host_os"]
, wenn Sie Ihr Betriebssystem verwenden.(Warnung: Lesen Sie den Kommentar von @Peter Wagenet) Ich mag das, die meisten Leute verwenden Rubygems , es ist zuverlässig und plattformübergreifend
Update- Verwendung in Verbindung mit "Update! Addition! Rubygems heutzutage ..." , um zu mildern, wann
Gem::Platform.local.os == 'java'
quelle
Entweder
oder
quelle
Config::CONFIG[‘host_os’]
?RbConfig::CONFIG["arch"]
irb(main):002:0> require 'rbconfig' => false
(irb):10:in
irb_binding ': Verwenden Sie RbConfig anstelle der veralteten und veralteten Config.` Also habe ich das verwendetRbConfig::CONFIG.each
und alle verschiedenen Werte aufgelistet. Vielleicht finden Sie dort etwas, das Ihnen hilft, das zu finden, wonach Sie suchen.Ich habe eine zweite Antwort, um dem Kampf weitere Optionen hinzuzufügen. Das os rubygem und seine Github-Seite haben eine verwandte Projektliste .
quelle
Probieren Sie das Juwel Launchy (
gem install launchy
):quelle
quelle
case Config::CONFIG['host_os']
?RbConfig::Obsolete::CONFIG['host_os']
... + keine Notwendigkeit, dasConfig
include
oder beide Modultypen, und dann ist dies die beste Antwort IMO. Beachten Sie, wie erinclude
das Modul verwendet hat, sodass weder RbConfig noch Config erforderlich sind.Aktualisieren! Zusatz! Rubygems versendet heutzutage mit
Gem.win_platform?
.Beispielverwendungen im Rubygems-Repo und in diesem zur Verdeutlichung:
quelle
Mit dem folgenden Code haben wir bisher ziemlich gute Ergebnisse erzielt
quelle
Für etwas, das in den meisten Ruby-Installationen leicht zugänglich ist und bereits etwas für Sie verarbeitet wurde, empfehle ich Folgendes:
Gem::Platform.local.os
# => zB. "mingw32", "java", "linux", "cygwin", "aix", "dalvik" ( code )Gem.win_platform?
# => zB. wahr, falsch ( Code )Sowohl dieses als auch jedes andere mir bekannte Plattformprüfungsskript basiert auf der Interpretation dieser zugrunde liegenden Variablen:
RbConfig::CONFIG["host_os"]
# => zB. "linux-gnu" (Code 1 , 2 )RbConfig::CONFIG["arch"]
# => zB. "i686-linux", "i386-linux-gnu" (wird als Parameter übergeben, wenn der Ruby-Interpreter kompiliert wird )RUBY_PLATFORM
# => zB. "i386-linux-gnu", "darwin" - Beachten Sie, dass dies "java" in JRuby zurückgibt! ( Code )/cygwin|mswin|mingw|bccwin|wince|emx/
RUBY_ENGINE
# => zB. "rubin", "jruby"Bibliotheken sind verfügbar, wenn Sie sich nicht um die Abhängigkeit kümmern und etwas Benutzerfreundlicheres wünschen. Insbesondere bietet OS Methoden wie
OS.mac?
oder anOS.posix?
. Die Plattform kann gut zwischen verschiedenen Unix-Plattformen unterscheiden.Platform::IMPL
wird zurückkehren, z. : linux ,: freebsd ,: netbsd ,: hpux. sys-uname und sysinfo sind ähnlich. utilinfo ist äußerst einfach und schlägt auf allen Systemen außerhalb von Windows, Mac und Linux fehl.Wenn Sie erweiterte Bibliotheken mit bestimmten Systemdetails wie verschiedene Linux-Distributionen wünschen, lesen Sie meine Antwort zum Erkennen der Linux-Distribution in Ruby .
quelle
RUBY_PLATFORM
oderRbConfig::CONFIG["host_os"]
bestückt sind. Wenn ich mir den Code anschaue, ist mir das immer noch nicht klar.Wenn ich nur wissen muss, ob es sich um ein Windows- oder Unix-ähnliches Betriebssystem handelt, reicht dies oft aus
quelle
File::SEPARATOR
. Es ist am besten, die Plattform wie bei der Entwicklung in Ruby zu ducken. Wenn Sie jedoch wissen müssen, ob es sich bei der Plattform um Windows handelt, stellen Sie die Frage, anstatt darauf zu schließen.