2012-08-02 12 views
37

¿Hay alguna forma de detectar el sistema operativo en ruby? Estoy trabajando en el desarrollo de una herramienta de bosquejo que necesitará detectar MAC vs. WINDOWS.Detección de sistemas operativos en Ruby

+4

Puede darnos más detalles sobre * por qué * necesitas hacer esto? A menudo, la detección de funciones puede ser más útil que la detección general de sistemas operativos. – Pete

Respuesta

20

Puede utilizar

puts RUBY_PLATFORM

irb(main):001:0> RUBY_PLATFORM 
=> "i686-linux" 

Pero @Pete es correcto.

+0

solo quería que la gente sepa que si ejecuta un rubí de 32 bits en una ventana de 64 bits, RUBY_PLATFORM le mostrará que la arquitectura es de 32 bits. – max

+1

RUBY_PLATFORM devolverá "java" cuando utilice JRuby, independientemente del sistema operativo. – robertodecurnex

+0

Esto es suficiente para algo así como detectar si está en OSX o no. – Mosselman

1

Puede inspeccionar RUBY_PLATFORM constante, pero se sabe que no es confiable en ciertos casos, como cuando se ejecuta JRuby. Otras opciones incluyen capturar el resultado del comando uname -a en sistemas POSIX, o usar una gema de detección como sys-uname.

48

Aquí está el mejor que he visto recientemente. Es de selenio. La razón por la que creo que es la mejor es que usa el campo rbconfig host_os que tiene la ventaja de trabajar en MRI y JRuby. RUBY_PLATFORM dirá 'java' en JRuby independientemente del sistema operativo en el que se ejecuta. Usted tendrá que modificar ligeramente este método:

require 'rbconfig' 

    def os 
    @os ||= (
     host_os = RbConfig::CONFIG['host_os'] 
     case host_os 
     when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ 
     :windows 
     when /darwin|mac os/ 
     :macosx 
     when /linux/ 
     :linux 
     when /solaris|bsd/ 
     :unix 
     else 
     raise Error::WebDriverError, "unknown os: #{host_os.inspect}" 
     end 
    ) 
    end 
+0

Bien, pero creo que debe actualizar su respuesta para tomar nota de la gema "os", que ya aborda el problema JRuby que mencionaste y obtiene este código de detección de nuestra base de código. Ver: http://stackoverflow.com/a/20579735/109561 – Gerry

+0

Este es también un excelente método si no puede instalar una gema en un sistema. Como en el caso en el que estoy trabajando actualmente, donde estoy construyendo un script de sistema de bajo nivel que no tiene acceso para instalar nada en el punto donde necesito saber la versión del sistema operativo. <3 –

54

Puede utilizar el os joya:

gem install os 

Y luego

require 'os' 
OS.linux? #=> true or false 
OS.windows? #=> true or false 
OS.java? #=> true or false 
OS.bsd?  #=> true or false 
OS.mac?  #=> true or false 
# and so on. 

Ver: https://github.com/rdp/os

+0

Gracias por encontrar eso. Impresionante respuesta. :) Lamentablemente, tiene dos años de votos para ponerse al día. – Gerry

Cuestiones relacionadas