Ésta es la forma en que detecto git en rubí:manera independiente de la plataforma de detectar si está instalado git
`which git 2>/dev/null` and $?.success?
Sin embargo, esto no es multiplataforma. Falla en sistemas no unix o aquellos sin el comando which
(aunque no estoy seguro de cuáles son).
necesito una manera de detectar git que satisface estas condiciones:
- funciona de forma fiable multiplataforma, incluso en Windows
- no hace nada de salida a la salida estándar $ o $ stderr
- pequeña cantidad de código
actualización: la solución es para evitar el uso de which
en conjunto y para redirigir la salida a NUL
en Windows.
require 'rbconfig'
void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
system "git --version >>#{void} 2>&1"
Los system
comando devuelve verdadero en falso en caso de fracaso, ahorrándonos el viaje a $?.success?
que se necesita cuando se utiliza acentos abiertos.
Tal http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby/ 2108757 # 2108757 podría ayudar? – VonC
Perdonar mi tontería potencial, ¿pero no 'qué' escribir en stdout? –
@Steven: por supuesto que sí, pero en su propia subshell, y se puede ver que utilicé backticks que captura esa salida en un valor de retorno que luego descarto. Si 'which' le escribió algo a STDERR, ruby lo reenviará a $ stderr del programa principal (algo que no deseo que suceda), así que usé' 2>/dev/null' para manejarlo. – mislav