Dies ist, wie ich git in Ruby erkennen:plattformunabhängige Art und Weise der Erfassung, wenn git installiert ist
`which git 2>/dev/null` and $?.success?
Dies ist jedoch nicht plattformübergreifend. Es schlägt auf Nicht-Unix-Systemen oder solchen ohne den which
Befehl fehl (obwohl ich nicht sicher bin, was diese sind).
brauche ich einen Weg git zu erkennen, dass diese Bedingungen erfüllt:
- Arbeiten zuverlässig plattformübergreifende, auch unter Windows
- nichts ausgibt auf $ stdout oder $ stderr
- kleine Menge Code
Update: die Lösung zu vermeiden, which
insgesamt zu verwenden und Ausgabe auf NUL
unter Windows umzuleiten.
require 'rbconfig'
void = RbConfig::CONFIG['host_os'] =~ /msdos|mswin|djgpp|mingw/ ? 'NUL' : '/dev/null'
system "git --version >>#{void} 2>&1"
Der system
Befehl gibt bei Erfolg true false bei einem Fehler, uns die Reise nach $?.success?
Einsparung, die benötigt wird, wenn Backticks.
Vielleicht http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby/ 2108757 # 2108757 könnte helfen? – VonC
Verzeihen Sie meine potentielle Dummheit, aber schreibt '' 'nicht zu stout? –
@Steven: natürlich tut es, aber in einer eigenen Subshell, und Sie können sehen, dass ich Backticks verwendet, die diese Ausgabe in einem Rückgabewert erfasst, die ich dann verwerfen. Wenn 'which' etwas an STDERR geschrieben hat, würde Ruby das an $ stderr des Hauptprogramms weiterleiten (etwas, was ich nicht möchte), also habe ich' 2>/dev/null' verwendet, um das zu verarbeiten. – mislav